我用一个bool变量来改变,但是好像是因为循环的过程一直在执行,bottom按了第一次之后就不再响应了,而且整个exe好像也死了。不知到有什么方法来实现这样的过程。

解决方案 »

  1.   


    void CCCDApplicationDlg::OnBnClickedButtonContinue()
    {
    // TODO: 在此添加控件通知处理程序代码
    //if(m_hCcdDevice == NULL)
    //{
    // MessageBox(_T("警告:没有正确打开数据采集卡!"),_T("系统警告"),MB_OK);
    // return;
    //}

        DWORD returnCode;
    CString str; BFlagcontinue=!BFlagcontinue; if(BFlagcontinue)
    {GetDlgItem(IDC_BUTTON_CONTINUE)->SetWindowText(_T("停止"));}
    else
    {GetDlgItem(IDC_BUTTON_CONTINUE)->SetWindowText(_T("连续采集"));} while(BFlagcontinue)
     {
     if(BFlagcontinue)
         {
    if((returnCode=lcDataAcquisition(m_hCcdDevice,iCCDData))!=0)
    {
    str.Format(_T("设备故障: 0x%x"),returnCode);
    MessageBox(str,_T("采集失败"),MB_OK);
    return;
    }
        } 
        else
        {
          return; 
        }
        }; return;
    }
      

  2.   

    线程函数的声明
    UINT ThreadFunction(LPVOID lpvoid);在你的程序里面调用,线程就创建好了,优先级和安全性这些参数可以参见MSDN
    CWinThread * thread = AfxBeginThread(ThreadFunction, this);线程函数的定义
    UINT ThreadFunction(LPVOID lpvoid)
    {
        这里把lpvoid转换成你自己的类指针就可以编程了.
        把while循环放在此处...
    }
      

  3.   

    程序卡在while上了,就算是线程函数也需要适当的sleep
    个人觉得楼主的基础比较差的话,先不要接触线程,用计时器代替,会比较简单
      

  4.   

    楼主在对话框的OnInitDialog()函数里加入
    SetTimer(1, 延迟毫秒数, NULL);然后加入对话框的OnTimer消息处理,把按钮里面的代码转移到OnTimer,while循环去掉
      

  5.   

    我想应该就是用按钮把while循环新建一个新的线程去运行,同时控制bool类型的值
      

  6.   

    这个while不是一打开就运行的,要点了按钮再运行的啊,这样也用OnTimer()?
      

  7.   

    AfxBeginThread()创建线程,将需要的参数作为线程函数的参数传递给线程,注意参数的作用域范围
      

  8.   

    这是我在其他帖子里看到的,感觉可以用,不知道各位有什么看法,同时,我也想试试多线程下面的情况不用创建线程,可在循环中加入 
    MSG       message; 
    while(1){ 
        if(::PeekMessage(&message,       NULL,       0,       0,       PM_REMOVE))       {       
                        ::TranslateMessage(&message);       
                        ::DispatchMessage(&message);       
        } 

    这样就可以响应按钮消息了
      

  9.   

    这类操作肯定是通过多线程实现
    你看看这篇文章
    http://blog.csdn.net/xianglitian/article/details/6729851
      

  10.   

    不是很好,如果lcDataAcquisition函数很费时的话,也可能造成界面暂时无法响应