子线程和主线程关系

zhou200934 2009-05-08 10:33:23
我的服务器端的多线程程序
子线程如下:
DWORD WINAPI SelectThread(LPVOID pParam)
{
DWORD r;
CMySock* psock=(CMySock*)pParam;


fd_set readfds;

struct timeval Timeval;

Timeval.tv_sec = 0;
Timeval.tv_usec = 10;

CSelectModelApp* pwnd = (CSelectModelApp*)::AfxGetApp();


while(true)

{
FD_ZERO(&readfds);
FD_SET(psock->m_clientsocket , &readfds);
if(select(0, &readfds, NULL, NULL, &Timeval)>0)
{
if(FD_ISSET(psock->m_clientsocket,&readfds))
{

::PostMessage(pwnd->m_pMainWnd->m_hWnd, UM_READABILITY,(WPARAM)psock, NULL);
// AfxMessageBox("接收端接收到了");
}
}
}

return r;


}

加上AfxMessageBox("接收端接收到了");
这一句就收到了
为什么呢
...全文
143 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
biweilun 2009-05-08
  • 打赏
  • 举报
回复
PostMessage是把消息发入消息循环队列,如果前面的待处理消息比较多的话,不会立刻被主线程响应,用SendMessage则不会出现这个问题。用AfxMessage一下,正好是子线程阻塞一下,为主线程的消息得到赢得了一定的时间,所以响应了
saiyaman5 2009-05-08
  • 打赏
  • 举报
回复
看看进程占了多少cpu,就知道while的影响有多大,

不过我想应该是异步的问题
wrinky 2009-05-08
  • 打赏
  • 举报
回复
看你本机是多核还是单核,线程的调度是系统级别的,一个时间片一个时间片的给于线程。
yanjing_mail 2009-05-08
  • 打赏
  • 举报
回复
子线程的while循环不会对主线程产生影响,不然线程要了还有什么用呢
zhou200934 2009-05-08
  • 打赏
  • 举报
回复
我自己想法:
是不是因为AfxMessageBox("接收端接收到了");
这一句导致子线程暂时终止了,使主线程得以对消息处理,
否则子线程不让出时间让主线程处理消息呢(子线程有一个true的while循环)?
如果是这样的话,那么主线程和子线程的处理时间是怎样协调的呢?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧