pthread_create(&thread, NULL, AcceptLoop, (void *)this);
我已经声明了这样并且在AcceptLoop函数内部我有无限循环。我想在关闭服务器时关闭此线程。我读过pthread_cancel和pthread_join,但我不确定哪一个更好更安全。我想听一些详细的说明或教程。提前谢谢。
答案 0 :(得分:2)
您不需要做任何事情,只需从线程函数返回就可以干净地结束线程。您也可以拨打pthread_exit()
,但我宁愿回来。
pthread_cancel()
是可怕的,复杂的/难以正确的。尽可能保持清醒。
如果您想知道线程何时结束并且对pthread_join()
值感兴趣,则最需要return
。
pthread_join(3)或 应该调用pthread_detach() 每个线程 应用程序创建的,以便为线程提供系统资源 可 释放。 (但请注意,所有线程的资源都已释放 当。。。的时候 流程终止。)
http://www.kernel.org/doc/man-pages/online/pages/man3/pthread_detach.3.html
答案 1 :(得分:1)
我相信你想通过主线程的信号退出工作线程。
在AcceptLoop
内,而不是无限循环,你循环一个条件,你可以通过你的主线程设置条件,你将不得不为这个变量使用一些同步。从主线程设置变量后,工作线程AcceptLoop
将会中断,然后您可以调用pthread_exit
。
如果您希望主线程等待子线程退出,可以使用pthread_join
来执行此操作。
通常,子线程可以在三种情况下退出:
pthread_exit
。pthread_cancel
。