如何实现暂停功能?高手们,请啦!

cmsbai 2002-12-28 04:35:01
我在对话框加了两个命令按钮,“开始”和“暂停”
开始按钮对应的响应函数为:OnStart()
CMyDlg::OnStart()
{
while(m_stop!=1) function();
}
暂停按钮对应函数为:
CMyDlg::OnStop()
{
m_stop=1;
}
但是一旦进入OnStart(),系统为该程序分配的CPU资源全被OnStart()幻术函数占用,
无法响应暂停按钮,请高手指点!
送分!!!!!!!!!
...全文
49 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmsbai 2002-12-31
  • 打赏
  • 举报
回复
MSG msg;
for(;m_bStop==FALSE;)
{
if(PeekMessage(&msg....))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
myfunction();
}
我用这种方法解决了问题,当然引进线程也能很好的解决问题。
不过我加进Sleep(..L)却并不能解决问题。也许是我加进的方法不对,不过我试过n次,都不成功。希望zhaolaoxin能试一下,如果行,请告诉我,谢谢!
zhjb113 2002-12-30
  • 打赏
  • 举报
回复
不要让你的线程总是运行,让它定期查看一下有没有终止的信号
不要sleep
建议看看侯俊杰的win32多线程编程一书
myfunction()
{
这里的功能最好是周期性的。
for(;m_bStop==FALSE;)
{

}
}
foxustc 2002-12-29
  • 打赏
  • 举报
回复
agree with DoItFreely!
这种方法的确好使

MSG msg;
for(;m_bStop==FALSE;)
{
if(PeekMessage(&msg....))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
myfunction();
}
cmsbai 2002-12-29
  • 打赏
  • 举报
回复
是的,我是在做一个同步模拟器(操作系统上机作业),用信号量机制。
有以上高手的指点,我已经解决了那个问题,在这里我谢谢大家。
并且希望多多交流(不过现在我恐怕还没有和大家交流的实力)。
icelight 2002-12-29
  • 打赏
  • 举报
回复
以上只有zhaolaoxin()的答案是对的。楼主的问题与线程无关。

加个::sleep(500)就可以防止系统为该程序分配的CPU资源全被OnStart()函数占用。
qrlvls 2002-12-29
  • 打赏
  • 举报
回复
我想是不是信号量的问题

SuspendThread
ResumeThread ---------- 你是说这个吗
songbird 2002-12-28
  • 打赏
  • 举报
回复
可以将这个线程挂起,将运行优先权交给别的线程
DoItFreely 2002-12-28
  • 打赏
  • 举报
回复
MSG msg;
for(;m_bStop==FALSE;)
{
if(PeekMessage(&msg....))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
myfunction();
}
zzhcom 2002-12-28
  • 打赏
  • 举报
回复
应该将function放到一个线程中去执行!
static CALLBACK void function();
{
while(g_bStop)
yourfunc();
}
再用AfxBeginThread(..)启动线程。
大致是这样
zhaolaoxin 2002-12-28
  • 打赏
  • 举报
回复
CMyDlg::OnStart()
{
while(m_stop!=1)
{
Sleep(500); // new code
function();
}
}
llwwwww 2002-12-28
  • 打赏
  • 举报
回复
把function();
放到Idle()里
cmsbai 2002-12-28
  • 打赏
  • 举报
回复
听说用线程可以解决这个问题,但是不知怎样具体实现。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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