读书人

线程中含有阻塞是socket请教怎么在外

发布时间: 2012-02-23 22:01:35 作者: rapoo

线程中含有阻塞是socket,请问如何在外部终止线程
线程中是阻塞式的socket,我想在外部OnStop()来终止线程应该如何操作?搜了一些贴没发现具体的,小弟很菜,请大侠给出具体代码,谢谢大家。

DWORD WINAPI ThreadProc(LPVOID param)
{
while(true)
{
accept(...);
recv(...);
}

return 0;
}

void CTestDlg::OnStop()
{
//请问这里要怎样结束线程?
closesocket(socket);
}

[解决办法]
2楼的方法可以,但是线程最好别强杀。。
可以在while置个标识位 while(bflag)
想退出线程时,只需要让bflag=false;
[解决办法]

探讨
lz可以试试直接杀掉线程,TerminateThread(HANDLE);把你创建线程的返回的句柄传递给他

[解决办法]
探讨
楼上的兄弟,请注意while里面是阻塞式的socket啊,while里面可能停在recv(...);现在我想在它阻塞的状况下结束,改如何操作?

[解决办法]
while(TRUE)
{
if(PeekMessage(&msg,0,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
if(msg.message==IDCANCEL) // <---这里退出
break;
}
}
[解决办法]
用select再accept,不要采用永久阻塞模式

读书人网 >VC/MFC

热点推荐