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

时间:2013-04-02 23:23:47

标签: c multithreading pthreads

我对退出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 END\n");
    return 0;
}

3 个答案:

答案 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中所示。