我希望在我的进程执行完毕后使用pthread_cancel来取消我的“计时器”线程。基本上我们正在将修改后的终端作为项目。当我在一个终端中呼叫睡眠300时,我希望能够打开另一个终端,运行相同的程序,但是调用“pkill -HUP sleep”并取消睡眠呼叫和计时器。但是,计时器会继续使用我当前的解决方案。
else if (pid > 0){
pthread_t thread;
int threadError = pthread_create(&thread, NULL, timer, NULL);
if (threadError != 0){
exit(1);
}
int status = 0;
wait(&status);
if (WIFEXITED(status)){
// how do I change this to kill the other thread?
threadError = pthread_cancel(thread);
if (threadError != 0)
exit(1);
printf("Child exited with code %d\n", WEXITSTATUS(status));
}
else{ // child
// run command and capture error with errorNumber
int errorNumber = execvp(argv[0], argv);
if (errorNumber == -1){
logerror(5, "execvp", "Error running command.");
exit(1);
}
}
我也会包括我的计时器功能。
void * timer(void * nothing){
//tracks seconds of execution
time_t start = time(NULL);
for(;;){
sleep(UPDATETIME); //constant set to 1
printf("Elapsed time: %ld seconds\n", time(NULL) - start);
}
pthread_exit(0);
}
我一直在寻找pthread_cancel的手册页,当我正在运行这个程序的新实例时,我似乎无法找到取消此线程的方法。
编辑:我认为我的问题实际上是这个pkill命令没有正确终止我的子进程而不是pthread_cancel有问题。我将编辑上面的内容以包含我的子进程。
答案 0 :(得分:0)
在pthread_join();比pthread_cancel()更好;请查看文档和示例......