AfxEndThread 这是什么?
OnBnClickedButtonCycleReset()只负责反转m_bCycledReset,别的不做。
循环部分拿别处去。

解决方案 »

  1.   

    我觉得比较合理的做法是:用于循环检测usb设备的while()循环放到一个单独的worker thread里面。
    在while()循环中WaitFor...一个Event或者信号量。点击按钮,创建worker thread,线程函数里面的while()循环开始执行。开始检测。
    再次点击按钮,将Event设置为有效状态,这样WaitFor...返回WATI_OBJECT_0之后,
    就break;,退出循环。结束检测。点击按钮时,应该创建线程,还是将退出事件设置为有效状态,可以用现在的
    成员变量m_bCycledReset来控制。楼主现在的程序,在UI主线程中搞了一个busy loop,肯定会让界面卡住的。
      

  2.   

    你的程序一直都在执行while中的操作啊,从来也没退出过,当然会卡了,搞个线程运行呗,线程里面去检测这个标志
      

  3.   

            while (m_bCycledReset == TRUE)
            {
                g_Analyser.DisposeAtrCmd("/atr"); // 与usb相关的处理函数
             if (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
              {
                   if (msg.message == WM_QUIT)
                        break ;
                   TranslateMessage (&msg) ;
                   DispatchMessage (&msg) ;
              }

            }