子线程怎么不阻塞主线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子线程怎么不阻塞主线程相关的知识,希望对你有一定的参考价值。

参考技术A 可我想主函数不被阻塞,怎么办呢? 还有什么更好的办法么 ?(linux下面和win32的解答都能说下最好了)
------解决方案--------------------------------------------------------如果主线程不需要等待你那个子函数里调用的子线程全部结束,那个子函数里的线程可以以分离状态运行,线程调用pthread_detach(pthread_self())或者C/C++ code pthread_attr_t attr; pthread_attr_init(&attr); pthread_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_create(&tid, &attr, routine, NULL);
------解决方案--------------------------------------------------------子函数中使用了pthread_join()就自然阻塞了,你要想不阻塞,只有把pthread_join放到函数外面去了。
小菜愚见,仅供参考。
------解决方案--------------------------------------------------------detach或者轮询检测标记后join。
------解决方案--------------------------------------------------------给你借鉴下:
C/C++ code #include #include #include #include volatile LONG g_bCon; void printThread(void* pArg) int i = 0; while(g_bCon) printf("%d\n",i++); void countThread(void* pArg) _beginthread(printThread,0,0); Sleep(1000); g_bCon = 0; int main(int argc, char* argv[]) g_bCon = 1; _beginthread(countThread,0,0); system("pause"); /*这里必须要暂停下*/ return 0;
------解决方案--------------------------------------------------------windows中在主线程退出前必须要用WaitForSingleObject(),不然子线程也会跟着退出
------解决方案--------------------------------------------------------用消息机制
------解决方案--------------------------------------------------------子函数又添加了pthread_join()
这个就会让子函数阻塞等待了,如果想不阻塞等待的话就不能用这个函数了,可以在子函数创建线程时,设置成分离(detach)状态, pthread_detach(thread_id),让线程自己管理自己的后事,自动释放资源等。

以上是关于子线程怎么不阻塞主线程的主要内容,如果未能解决你的问题,请参考以下文章

主线程怎么给子线程发送消息

c语言中,创建的子线程如何给主线程发消息?

Python_线程线程效率测试数据隔离测试主线程和子线程

主线程创建了子线程,怎么让主线程退出,而子线程仍然运行

面试官:如何让主线程等待所有的子线程结束之后再执行?我懵了

C++11多线程中的detach()join()joinable()