有死循环的多线程结束的问题

huangys_fly 2010-01-21 11:20:04
又死循环的线程怎样结束了?

DWORD WINAPI MyThread(LPVOID lpPrame)
{
HWND hwnd = reinterpret_cast<HWND>(lpPrame);
ShowWindow(hwnd, SW_SHOW); // 显示弹出的对话框

// 利用死循环修改界面的值
while(TRUE)
{
//修改弹出对话框CStatic的值
...
sleep(1000);
}

return 0;
}

调用,一个CButton事件
void CSliderControlDlg::OnBnClickedButton1()
{
CDlgTip *pDlg = New CDlgTip();
CreatThread(NULL, NULL, MyThread, pDlg->GetSafeHand(), NULL, NULL);
F(); // 一个函数,假定消耗时间很长,我需要用一个弹出对话框显示在程序在运行,
// 运行玩了以后,关闭该对话框,请问怎么样做好?
}
...全文
297 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
bsnry 2012-04-27
  • 打赏
  • 举报
回复
函数:

void fun( 句柄)
{

MessageBox

waitforsingleObject(线程句柄,-1);



}

i华仔 2012-04-27
  • 打赏
  • 举报
回复
现在才看到你当初提的问题,不知你是你提来太早了,还是哥来的太晚了。罪过罪过!~
nanchangfantasy 2012-04-13
  • 打赏
  • 举报
回复
顶, 没看明白说什么
majia2011 2012-04-13
  • 打赏
  • 举报
回复
哈哈哈,都是这么过来的

刚毕业那会写的东西,现在看来跟过家家一样
huangys_fly 2012-04-13
  • 打赏
  • 举报
回复
现在在回头看看当初提的问题,真是弱智,汗颜....
zhou1xp 2010-02-03
  • 打赏
  • 举报
回复
用消息通知退出
AugustFog 2010-02-03
  • 打赏
  • 举报
回复
不要用sleep, 用Event
huangys_fly 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 superlee19 的回复:]
两根线程,一个处理界面,一个负责运算,运算线程开始前通知界面线程显示对话框,完成之后再通知一次
界面线程可以用WaitForSingleObject之类的函数等待,不用Sleep
[/Quote]

能帮忙亮你的代码实现吗?
我的如下,有点不知所错了,请指教。。
void CSliderControlDlg::OnBnClickedButton1()
{
CDlgTip *pDlg = New CDlgTip();
CreatThread(NULL, NULL, MyThread, pDlg->GetSafeHand(), NULL, NULL);
F(); // 一个函数,假定消耗时间很长,我需要用一个弹出对话框显示在程序在运行,
// 运行玩了以后,关闭该对话框,请问怎么样做好?
}

DWORD WINAPI MyThread(LPVOID lpPrame)
{
HWND hwnd = reinterpret_cast <HWND>(lpPrame);
ShowWindow(hwnd, SW_SHOW); // 显示弹出的对话框

// 利用死循环修改界面的值
while(TRUE)
{
//修改弹出对话框CStatic的值
...
sleep(1000);
}

return 0;
}


huangys_fly 2010-01-31
  • 打赏
  • 举报
回复
[Quote=引用楼主 huangys_fly 的回复:]
又死循环的线程怎样结束了?

DWORD WINAPI MyThread(LPVOID lpPrame)
{
  HWND hwnd = reinterpret_cast <HWND>(lpPrame);
  ShowWindow(hwnd, SW_SHOW);  // 显示弹出的对话框

  // 利用死循环修改界面的值
  while(TRUE)
  {
    //修改弹出对话框CStatic的值
    ...
    sleep(1000); 
  }
 
  return 0;
}

调用,一个CButton事件
void CSliderControlDlg::OnBnClickedButton1()
{
    CDlgTip *pDlg = New CDlgTip();
    CreatThread(NULL, NULL, MyThread, pDlg->GetSafeHand(), NULL, NULL);
    F(); // 一个函数,假定消耗时间很长,我需要用一个弹出对话框显示在程序在运行,
            // 运行玩了以后,关闭该对话框,请问怎么样做好?
}
[/Quote]


这样界面不是静止了吗?如果你阻塞?
_JeffreyWu 2010-01-21
  • 打赏
  • 举报
回复
我的天,我觉得你还是在修改值的时候同时update界面最好
superlee19 2010-01-21
  • 打赏
  • 举报
回复
两根线程,一个处理界面,一个负责运算,运算线程开始前通知界面线程显示对话框,完成之后再通知一次
界面线程可以用WaitForSingleObject之类的函数等待,不用Sleep
zhongchengli 2010-01-21
  • 打赏
  • 举报
回复
ding
benbshmily 2010-01-21
  • 打赏
  • 举报
回复
你可以把这个函数的功能交给一个线程去做,然后在OnBnClickedButton1里弹出一个对话框阻塞。当那个线程的事情做完之后再唤醒。
愚见。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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