我对退出while循环有疑问。我正在编写代码,我正在创建两个线程,它打印字符串,而main()部分必须每500毫秒打印一个点(“。”)。你可以帮我解决第二个线程终止后如何退出while循环,在输出上得到这样的东西: ......你好......世界......结束
谢谢你的帮助。
int main()
{
int mls = 0.5 ;
pthread_t thread1;
pthread_t thread2;
struktura param1 = { "Hello", 2};
struktura param2 = { "World", 4};
pthread_create( &thread1, NULL, thread, ¶m1);
pthread_create( &thread2, NULL, thread, ¶m2);
while(1)
{
printf(".");
fflush(stdout);
sleep(mls);
}
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
printf("THE END\n");
return 0;
}
答案 0 :(得分:2)
在考虑了这个问题之后,我得出的结论是,如果主要的用例是确定两个线程(线程“Hello”和线程“World”)都消失了,那么就没有其他方法可以使用{两者都是{1}}。
当pthread_join()
阻塞调用线程时,自然的结论就是启动第三个线程(线程“Dots”)来按要求绘制点。
第三个线程(线程“Dots”)然后由pthread_join()
- 线程发出信号,等待其他两个线程(线程“Hello”和线程“World”)从两个阻塞返回后完成致电main()
。如果这样做,第三个线程(线程“Dots”)就完成了。后者可能会分离,因为没有人等待它终止。
答案 1 :(得分:1)
while(pthread_kill(thread1, 0) == 0 && pthread_kill(thread2, 0) == 0)
{
printf(".");
fflush(stdout);
sleep(mls);
}
int pthread_kill(pthread_t thread,int sig);
您可以使用此函数来检索线程的状态,如果sig参数为0,则不会发送信号,但仍会执行错误检查(例如,您可以使用它来检查线程是否“活着”)。 BR />
它可以返回0或错误代码(ESRCH - 找不到ID线程的线程,还有一个对于这种情况不重要的线程),如果返回值为0而线程为'alive',如果返回值是错误代码(ESRCH),而不是指定的线程,例如。它已经'死了'。
答案 2 :(得分:-1)
尝试使用pthread_exit,如terminate c thread中所示。