请教一下,以以下阻塞方式多线程传输过程中,怎样实现暂停和停止呢?

neil_cq 2005-08-11 04:53:54
各个传输线程都调用以下代码进行传输
while(len>0)
{
len2=len>nTransSize?nTransSize:len;
myFile.Read(m_buf, len2);
int aa=sendn(TrsfSocket,m_buf,len2);
if(aa<0)
break;
}
我曾在这个循环中加了暂停标志位,但是传输中,还是没能暂停下来,传输继续在执行
while(len>0)
{
if (bPause) {
Sleep(500);
continue;
}
len2=len>nTransSize?nTransSize:len;
myFile.Read(m_buf, len2);
int aa=sendn(TrsfSocket,m_buf,len2);
if(aa<0)
break;
}
...全文
118 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
njchf 2005-08-11
  • 打赏
  • 举报
回复
建议楼主先debug一下,看看到底有没有执行到Sleep(500),如果没有先查这个原因吧,你这样用虽然暂停不了线程,但至少不会再发生读写操作,因为不管用那种方法,一般都是由主控线程通知工作线程暂停的
neil_cq 2005-08-11
  • 打赏
  • 举报
回复
该怎样做呢?能不能说得详细点啊?
thisisll 2005-08-11
  • 打赏
  • 举报
回复
一开始bPause是真的话
永远都停不了
njchf 2005-08-11
  • 打赏
  • 举报
回复
你要暂停可以wait一下,然后等待主线程notify唤醒,不然只能500ms,你感觉不出来的
另外调试跟踪一下看看有没有执行到sleep(500)函数
neil_cq 2005-08-11
  • 打赏
  • 举报
回复
这是暂停啊,BREAK或者RETURN是停止,continue之后,只是在不断地SLEEP,并没有数据发送出去啊
njchf 2005-08-11
  • 打赏
  • 举报
回复
if (bPause) {
Sleep(500);
continue;
}
你都continue了,怎么停啊,要么len = 0 要么return或break才行啊

18,363

社区成员

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

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