我在主线程构造一个CAsyncSocket的派生类MySocket,调用
MySocket socket;
socket.Create();
socket.Connect("127.0.0.1", 2000);
然后在MySocket的OnConnect里设断点,可以拦截下来。服务端显示成功连接。但如果我在一个由_beginthreadex创建的线程里用同样的代码,服务端仍然显示成功连接,但OnConnect无法断下来。OnReceive等等都无法断下。请问应该怎么做?
MySocket socket;
socket.Create();
socket.Connect("127.0.0.1", 2000);
然后在MySocket的OnConnect里设断点,可以拦截下来。服务端显示成功连接。但如果我在一个由_beginthreadex创建的线程里用同样的代码,服务端仍然显示成功连接,但OnConnect无法断下来。OnReceive等等都无法断下。请问应该怎么做?
你的是线程有吗?
MSG msg;
if(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
以后,就可以断下来了。那如果这个线程是无限循环的( while(true) ),那是不是每循环一次都要加上上面的消息处理?是像这样处理一次,还是要循环?那如果以后我不需要调试了,是不是可以去掉这些消息处理?这些消息处理语句对于Socket的工作有没有影响?
你可以用MFC 的界面线程!这些都处理好了.
用AfxBeginThread启动两个线程,一个是实际工作的线程,
MSG msg;
while (true)
{
if (GetMessage(&msg, NULL, 0, 0))
{
DispatchMessage(&msg); if (msg.message == WM_USER)
{
// do something
}
}
else
{
// retrieved WM_QUIT
break;
}
}
另一个是定时器线程:
MSG msg;
while (true)
{
if (PeekMessage(&msg, NULL, WM_QUIT, WM_QUIT, PM_REMOVE))
{
break;
}
_thread->PostThreadMessage(WM_USER, 0, 0);
Sleep(interval);
}
其中_thread是工作线程的CWinThread*。定时器线程每过interval时间就向工作线程发送一个WM_USER消息。工作线程收到这个消息才做事,否则只是等待消息和分派消息。这样只要interval不为0,就可以保证两个线程都不会100%占用CPU,而且可以达到我的目的。如果是那种非定时执行的线程,而是因某个事件触发工作的线程,就由事件触发者去调用_thread->PostThreadMessage(WM_USER, 0, 0);就可以了。不知道我现在这样做对不对?有没有更好的方法?