如何跳出while循环

stupidbrother 2006-04-28 03:46:13
这是我的一段程序。我想用OnButtonVisionGrab()跳出OnButtonVisionInit()中的while循环,怎么做。谢谢了!
void CTestDlg::OnButtonVisionInit()
{
// TODO: Add your control notification handler code here

m_TempFlag = 1;

CWnd* pStartButton = GetDlgItem(IDC_BUTTON_VISION_INIT);
if(pStartButton != NULL)
{
pStartButton->EnableWindow(FALSE);
}

m_Digitizer.Halt();
m_Digitizer.Grab();

CApplicationTimer m_TimerMode;
m_TimerMode = m_Application.GetTimer();
m_TimerMode.SetSynchronizationMode(appTimerSynchronous);
m_TimerMode.Reset();

while(m_TempFlag == 1)
{
m_Digitizer.Grab();
}

UpdateData(FALSE);
}

void CTestDlg::OnButtonVisionGrab()
{
// TODO: Add your control notification handler code here

m_TempFlag = 2;

CWnd* pGrabButton = GetDlgItem(IDC_BUTTON_VISION_GRAB);
if(pGrabButton != NULL)
{
pGrabButton->EnableWindow(FALSE);
}

m_Digitizer.GrabWait(digGrabEnd);

UpdateData(FALSE);

}
...全文
1636 13 打赏 收藏 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
stupidbrother 2006-05-19
  • 打赏
  • 举报
回复
谢谢roscoe(草上飞)
roscoe 2006-05-03
  • 打赏
  • 举报
回复
//

void CDlg::DoEvents()
{
MSG msg;
while (::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE) && !m_bCancel)
{
if (!AfxGetThread()->PumpMessage())
return;
}
}
void CDlg::Start() // On Button Start
{
m_btnStart.EnableWindow( FALSE );
m_bCancel = false;
while( ! m_bCancel )
{
... // operator code
DoEvents();
}
m_btnStart.EnableWindow( TRUE );
}


void CDlg::BreakIt // On Button Cancel
{
m_bCancel = true;
}

//
因为循环时消息是被阻塞的,所以要在循环中加入代接消息和转发消息的DoEvents
类似DoEvetns的使用在16位时代是最常用的,后来多线程出来大家都忘了.
DoEvents 的坏处是可能因用户误操作出现多次调用的问题,所以要在循环前后禁用/使能该BUTTON
mjm_d 2006-05-03
  • 打赏
  • 举报
回复
反正一句话 不到万不得已 别用
goto
:P
lyl_rabbit 2006-05-01
  • 打赏
  • 举报
回复
在while循环中加入消息处理
Practise_Think 2006-05-01
  • 打赏
  • 举报
回复
这样的情况使用多线程吧,如果在主线程里产生阻塞(死循环),那么整个界面就会僵死
stupidbrother 2006-05-01
  • 打赏
  • 举报
回复
我是这样做的:做了一个标记,当标记值改变时就跳出。可是根本不响应啊。一旦进入while循环,Dialog上的按键就不响应了,怎么办。--不用多线程。 谢谢
wbf420 2006-04-28
  • 打赏
  • 举报
回复
m_TempFlag = 0;
snowbirdfly 2006-04-28
  • 打赏
  • 举报
回复
恩~
方法就是设置一个BOOL型变量,然后直接跳出就可以了~~~
ruby0602 2006-04-28
  • 打赏
  • 举报
回复
OnButtonVisionGrab()里设置一个Bool变量,并用break跳出循环
meicaikourou 2006-04-28
  • 打赏
  • 举报
回复
if(flag)
break;
gaoxcheng 2006-04-28
  • 打赏
  • 举报
回复
你可以用一个BOOL值来控制,如果为真或为假就用break结束while循环
Pipi0714 2006-04-28
  • 打赏
  • 举报
回复
使用多线程SetEvent CreateEvent WaitForSingleObject
kongguangming 2006-04-28
  • 打赏
  • 举报
回复
break;

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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