问题描述
- 关于多线程的疑问,求各位大神解答
-
```using namespace std;DWORD WINAPI Thread_accept (PVOID lParam)
{
cout<<"进入线程"<<endl;return 0;
}
int main()
{
WSADATA wsaData;
WSAStartup (MAKEWORD (2, 2) ,&wsaData);HANDLE Thread; Thread = CreateThread ( NULL ,0 ,Thread_accept ,NULL ,0 ,NULL); return 0;
}
为什么最后输出的时候子线程并不执行输出语句? 求各位大神解答
解决方案
main函数中,仅仅是通过createthread()创建一个线程,之后的动作就是return,所以不输出子线程的内容是很正常的。
若是你想让子线程输出内容,需要在main和子线程之间通信上做文章,
比如,
1. 定时探测子线程是否退出,若已退出,main再退出。
2. 声明一个全局变量,当子线程执行时赋值为1 ,main中判断该全局变量是否已变为1,若是,则退出。
还有很多其他方法!
希望我的解答,对你有所启发!
解决方案二:
在return前加上WaitForSingleObject(Thread, INFINITE);
解决方案三:
HANDLE Thread;
Thread = CreateThread ( NULL ,0 ,Thread_accept ,NULL ,0 ,NULL);
Sleep(3000); //给线程足够时间运行完再退出。
return 0;
解决方案四:
为什么不用_beginthread
解决方案五:
同时小白
类似的代码我测试过,成功了,目测没发现楼主的代码有逻辑上的错误,不过用完了没close不是个好习惯哦
解决方案六:
子线程还没来得及运行,main就退出了。在main最后用WaitForSingleObject等一下试试,或者简单的sleep一会。
时间: 2024-11-03 17:35:48