根据您的代码,我可以给出一个简单的答案:
在这种情况下,根本不要使用线程.
你不需要它们.存储开始时间,让用户回答,在用户给出答案后再次检查时间.
{
time_t startTimeSec = time(NULL);
// answering
time_t endTimeSec = time(NULL);
time_t timeTakenSec = endTime-startTime;
if (timeTaken > 10) {
// do your thing
}
}
回答你的问题:
您应该使用互斥保护或volatile变量来在线程之间进行异步通信.从一个线程设置该变量并在另一个线程中检查它.然后重置其值并重复.一个简单的片段:
int stopIssued = 0;
pthread_mutex_t stopMutex;
int getStopIssued(void) {
int ret = 0;
pthread_mutex_lock(&stopMutex);
ret = stopIssued;
pthread_mutex_unlock(&stopMutex);
return ret;
}
void setStopIssued(int val) {
pthread_mutex_lock(&stopMutex);
stopIssued = val;
pthread_mutex_unlock(&stopMutex);
}
使用pthread_cancel()是一个选项,但我不建议这样做.在此调用返回后,您必须检查线程状态,因为pthread_cancel()不会等待实际的线程停止.而且,对我来说更重要的是,我认为使用它很难看.