如何终止无限循环(线程)



我对退出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, &param1);
    pthread_create( &thread2, NULL, thread, &param2);
    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线程中看到的那样。

最新更新