多线程运行时间控制while(true){...Sleep(10000)}这样控制时间会不会有问题,时间准备吗?会不会锁死? 多线程运行时间控制while(true){...Sleep(10000)}这样控制时间会不会有问题,时间准备吗?会不会锁死? 有没有其它的更好的办法来控制下一次线程while运行的时间? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果在线程中Sleep时间过大的话,线程有可能响应不过来,发送给线程的消息得不到及时的处理,建议使用WaitForSingleObject等待 就是为了防止不断的CreateThread 所以一单线程Create就while等待2分钟后再次执行. 2楼说的,如果等待时间太长,就用WaitForSingleObject:DWORD dw = WAIT_TIME_OUT;while(WAIT_TIME_OUT == dw){//do some thing......dw = WaitForSingleObject(hEvent,time);//hEvent 是你创建的事件句柄//time 时间间隔 比如 1000*60*10就是10分钟}这样的话,如果你用Sleep 10分钟,要是此时你要关闭这个线程,而线程处于Sleep状态,你可能无法立刻关闭但是用这个的话,你可以在外部设置SetEvent(hEvent),线程可以马上退出了一样的等待效果,可是去灵活了很多 更灵活的?你的灵活是什么意思哦你如果用SLEEP,没睡够它是不会醒的!但是用等待内核对象,随时可以唤醒一个线程,我是指这个灵活性! waitfor...要好一点,一般不要Sleep WaitForSingleObject等待吧,用sleep,不符合编程逻辑啊 呵呵 而且sleep 不如 WaitForSingleObject 来的灵活 Sleep不可靠啊,还是WAITFORSINGLEOBJECT把! 服务器char recvBuf[1000];ZeroMemory(recvBuf,sizeof(recvBuf));if(SOCKET_ERROR==recv(m_socketRev,recvBuf,1000,0)){ TRACE("失败!%d\n",htons(m_addrClient.sin_port)); if(SOCKET_ERROR==send(m_socketRev,"服务器接收失败",strlen("服务器接收失败")+1,0)) { TRACE("服务器接收失败 发送失败\n"); } else { TRACE("服务器接收失败 发送成功\n");// m_ListRevConnect. }}else//成功接收客户端{send(m_socketRev,"成功",strlen("成功")+1,0))...........}客户端//向服务器发出连接请求connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); //发送请求数据if(SOCKET_ERROR==send(sockClient,(const char*)&strSend,sizeof(SendStruct)+1,0)){ TRACE("COM=%s发送失败\n",pSC.m_sPort);}else{ TRACE("COM=%s发送成功\n",pSC.m_sPort); }//TRACE("Send请求 com=%s\n",pSC.m_sPort);//接收数据char recvBuf[1000];ZeroMemory(recvBuf,sizeof(recvBuf));if(SOCKET_ERROR==recv(sockClient,recvBuf,1000,0)) { TRACE("COM=%d接收失败\n",pSC.m_sPort); }else{//服务器返回数据..................} 请问,我画的网格和静态文本框不重合怎么办 窗口消息问题 帮我看看,关于使用异或绘图。 重叠I/O “投递一个0字节的接收操作”? Win200下非管理员访问注册表的安全性问题! 如何让视图中的编辑控件(CEdit)有下陷的效果!! #### 一个关于设置映射模式、CDC的问题,先谢谢了! #### 有关VC的报表设计和打印 CMFCPropertyGridProperty 按钮 关于获取键盘消息,答者有分……帮帮忙吧!很急!!! 没有相应OnLButtonDown这个函数 cvFindChessboardCorners 棋盘角点检测问题
{
//do some thing..
....dw = WaitForSingleObject(hEvent,time);
//hEvent 是你创建的事件句柄
//time 时间间隔 比如 1000*60*10就是10分钟
}这样的话,如果你用Sleep 10分钟,要是此时你要关闭这个线程,而线程处于Sleep状态,你可能无法立刻关闭但是用这个的话,你可以在外部设置SetEvent(hEvent),线程可以马上退出了一样的等待效果,可是去灵活了很多
ZeroMemory(recvBuf,sizeof(recvBuf));
if(SOCKET_ERROR==recv(m_socketRev,recvBuf,1000,0))
{
TRACE("失败!%d\n",htons(m_addrClient.sin_port)); if(SOCKET_ERROR==send(m_socketRev,"服务器接收失败",strlen("服务器接收失败")+1,0))
{
TRACE("服务器接收失败 发送失败\n"); }
else
{
TRACE("服务器接收失败 发送成功\n");
// m_ListRevConnect.
}
}
else//成功接收客户端
{
send(m_socketRev,"成功",strlen("成功")+1,0))
...........
}
客户端//向服务器发出连接请求
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//发送请求数据
if(SOCKET_ERROR==send(sockClient,(const char*)&strSend,sizeof(SendStruct)+1,0))
{
TRACE("COM=%s发送失败\n",pSC.m_sPort);
}
else
{
TRACE("COM=%s发送成功\n",pSC.m_sPort);
}
//TRACE("Send请求 com=%s\n",pSC.m_sPort);
//接收数据
char recvBuf[1000];
ZeroMemory(recvBuf,sizeof(recvBuf));
if(SOCKET_ERROR==recv(sockClient,recvBuf,1000,0))
{
TRACE("COM=%d接收失败\n",pSC.m_sPort);
}
else
{
//服务器返回数据
..................
}