single thread:
whil(!event)
{
......
}mutil thread:
使用一个线程做管理线程,在得到终止事件后就终止事务线程

解决方案 »

  1.   

    设置一个标志,循环中检测到标志就break!
      

  2.   

    如果循环效率允许的话,最简单是将循环分解到OnTimer()中处理。
      

  3.   

    除了使用线程外,还可以用下面的方法,我手头没有MSDN,所以只能写下大概的思路,供参考 
    for (;;){
     //do what you want to do.
     MSG msg;
     if (GetMessage(&msg)){
       dispatumessage(&msg)
       TranslateMessage(&msg)
     }
    }
      

  4.   

    for(;;)
    {
    //检查中断的消息,以便退出
    MSG msg;    
    while(::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
    ::TranslateMessage(&msg);
    ::DispatchMessage(&msg); 
    }
    //退出
    if(!m_bQuit)
                            break;
    }
    然后可以在别的函数事件里改变m_bQuit的值,就可以中断了
      

  5.   

    最省事的可以用一个BOOL型全局变量来控制,点击按钮时改变变量的值来控制。
      

  6.   

    如果使用单线程,在纯数据循环里是不可能响应按钮的
    要使用单线程而要响应系统事件,就必须在加入循环中
    捕获系统事件的机制,如PeekMessage一类的;
    我认为在这种情况下还是用多线程比较好
      

  7.   

    集中方法:
    1、多线程
    2、OnTimer
    3、在循环中使用下面方法来转发消息:
       MSG msg;
       if (GetMessage(&msg))
       {
        dispatumessage(&msg)
        TranslateMessage(&msg) 
       }