我对退出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 ENDn");
return 0;
}
在考虑了这个问题之后,我得出的结论是,如果主要用例是真正确保两个线程(线程"Hello"和线程"World")都消失了,那么没有其他方法可以在两个线程上使用pthread_join()
。
由于pthread_join()
阻塞了调用线程,自然的结论是启动第三个线程(线程"Dots")来按要求绘制圆点。
第三个线程(线程"Dots")然后由main()
线程发出信号,等待其他两个线程(线程"Hello"和线程"World")在从两个阻塞调用返回到pthread_join()
后完成。如果这样做了,第三个线程(线程"Dots")就完成了。后者可以独立运行,因为没有人在等待它终止。
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,则不发送信号,但仍然执行错误检查(例如。你可以用它来检查线程是否"活着")。
它可以返回0或错误代码(ESRCH -没有线程ID线程可以找到,一个不重要的这种情况下),如果返回值为0比线程是"活",如果返回值是错误代码(ESRCH)比指定的线程不能找到eg。这是"死"。
尝试使用pthread_exit,正如您在终止c线程中看到的那样。