在程序中随时控制代码的暂停和继续。
让我来描述一下问题,虽然这个破帖子就我一个人看,但是以后我能还会碰到这问题。谁说的准呢?
mian函数里有一个无限循环的函数,一直在检查数据读取情况,然后控制数据写入数据库。
我要做的是,随时停止这个程序不让数据数据写入数据库,但是我没操作的时候一直在for循环,当我输入指令时代码又可以继续存储数据。
首先我想到的时直接getchar(),通过我输入的字符判断,但是马上就被我排除了(根本没必要写测试程序)。因为通过在循环里的getchar(),他会使得循环停止等待用户输入数据,终止了数据写入数据库。
那怎么样才能通过命令行输入来控制循环,但又在输入过程中不影响循环呢?自然而然就会想起把循环和输出分开。
这样的话解决方法就很明朗了,通过一个函数接收命令行的输入信息,然后通过接受的信息来设置一个全局变量的数值。然后循环通过这个数值来判断循环的继续和暂停。
现在问题就只有一个了,通常情况下程序会根据代码的位置进行顺序执行。为了让我们这个输入函数和循环在运行的时序上没有严格的顺序关系我们采用多线程解决这个问题。这样循环就不用等待命令行的输入信息让循环一直运行下去,而输入函数在另一个线程一直在监视命令行的输入,随时改变循环的运行条件。
#include <iostream>
#include <limits>
#include <cstdio>
#include <pthread.h>
#include <stdio.h>
using namespace std;
int stop = 1;
int a=0, b=0;
// 线程的运行函数
void* say_hello(void *args) {
char ch;
while(1)
{
cout<<"please input option:";
ch = getchar();
getchar();
if('s'==ch) {
cout<<"stop\t"<<a<<"\n";
stop=0;
}
else if('c'==ch) {
cout<<"continue\t"<<a<<"\n";
stop=1;
}
else cout<<"please in put 's' or 'c'\n";
}
stop = 0;
cout<<"stop = 0\n"<<endl;
return 0;
}
int main() {
// 定义线程的 id 变量,多个变量使用数组
pthread_t tids[1];
//参数依次是:创建的线程id,线程参数,调用的函数,传入的函数参数
int ret = pthread_create(&tids[0], NULL, say_hello, NULL);
if (ret != 0) {
cout << "pthread_create error: error_code=" << ret << endl;
}
while(1)
{
while (stop) {
b++;
if(b%100000==0)
{
a++;
b=0;
}
}
}
//等各个线程退出后,进程才结束,否则进程强制结束了,线程可能还没反应过来;
pthread_exit(NULL);
}