我在主线程中启动一个线程,然后使用GetMessage函数使主线程进入消息循环,并在子线程正常返回前发送自定义的线程退出消息到主线程(用PostThreadMessage函数发送,线程ID用全局变量传递给子线程),但子线程一返回,整个进程都结束了!这个怎么回事?我还在主线程返回前加上MessageBox,但却没有执行到进程就已经结束了,说明主线程根本没有正常结束……(sdk)
附部分代码:
主线程:
do
{
HANDLE jhModule = CreateThread( NULL, 0, nThread, NULL, 0, &jThreadId); CloseHandle(jhModule); if(GetMessage(&jmsg, NULL, 0, 0))
{
switch(jmsg.message)
{
case WM_RECON:
continue;
break;
default:
break;
}
}
else break; }while(1); MessageBox(NULL,"主线程退出!!!","警告",NULL); return 0;子线程: ret = send(jsocket, DataToSend, jrs, 0);
if(ret == SOCKET_ERROR)
{
err = WSAGetLastError(); //错误待处理!! if(err == WSAECONNRESET || err == WSAETIMEDOUT || err == WSAESHUTDOWN || err == WSAENETRESET) PostThreadMessage(threadid, WM_TEXT, NULL, NULL); return 0;
}我调试时程序能正确执行到PostThreadMessage,然后走过return就弹出汇编窗口,前面一排指令地址是0x7XXXXXXXX,说明是在系统领空里,我一按f5继续运行,程序就退出了!!!在主线程的GetMessage下断点也没有任何作用……
为什么子线程正常返回,整个进程就结束了?望高手赐教!
附部分代码:
主线程:
do
{
HANDLE jhModule = CreateThread( NULL, 0, nThread, NULL, 0, &jThreadId); CloseHandle(jhModule); if(GetMessage(&jmsg, NULL, 0, 0))
{
switch(jmsg.message)
{
case WM_RECON:
continue;
break;
default:
break;
}
}
else break; }while(1); MessageBox(NULL,"主线程退出!!!","警告",NULL); return 0;子线程: ret = send(jsocket, DataToSend, jrs, 0);
if(ret == SOCKET_ERROR)
{
err = WSAGetLastError(); //错误待处理!! if(err == WSAECONNRESET || err == WSAETIMEDOUT || err == WSAESHUTDOWN || err == WSAENETRESET) PostThreadMessage(threadid, WM_TEXT, NULL, NULL); return 0;
}我调试时程序能正确执行到PostThreadMessage,然后走过return就弹出汇编窗口,前面一排指令地址是0x7XXXXXXXX,说明是在系统领空里,我一按f5继续运行,程序就退出了!!!在主线程的GetMessage下断点也没有任何作用……
为什么子线程正常返回,整个进程就结束了?望高手赐教!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货