MFC开发的控件实现自动语音报警和语音对讲
控件中创建了一个对话框来显示视频和语音对讲,创建一个自动语音报警线程用来发送自动报警语音
由于自动语音报警和语音对讲独占音频通道。
如果正在自动语音报警的时候,点击语音对讲,必须关闭线程释放音频通道才能实现语音对讲。我现在是做法是:点击语音对讲,给控件主程序一个值,去控制关闭线程,然后用while()等待返回值,但是发现主程序一直停留在while()哪里大家帮帮忙啊

解决方案 »

  1.   

    建立一个线程时会返回一个句柄,通过这个句柄你控制线程的运行暂停继续的功能.你可以建立一个全局变量,这个全局变量是在类外面定义(不是类里的全局变量),这样在while里你就可以这么改了:
    BOOL m_Stop=TRUE;//批示线程运行状态
    线程函数:
    while(m_Stop)
    {
    }
    按钮函数:
    m_Stop=TRUE;//如果继续
    m_ThreadHandle.Resume();//线程的继续函数,函数名可能不对,但类似m_ThreadHandle是返回的线程的句柄
    m_Stop=FALSE;//如果暂停
    m_ThreadHandle.Start();//启动线程
      

  2.   

    WaitForSingleObject,等待线程句柄
      

  3.   

    跟踪下看看为什么线程没有退出  再者用WaitForSingleObject等待啊,可以设定timeout
      

  4.   


    ++
    while(true)
    {
       if(FLAG_STOP==m_nFlag)
       {//先释放资源
         sleep(10);
       }
       else if(FLAG_RERUN==m_nFlag)
       {
          //重新获取语音通话管道资源,进入语音通话状态
        }
        else
       {    }
    }
    其实也不用关闭语音线程,只是需要先退出语音通道资源,然后等报警解除后,在把标识位设置回去
      

  5.   

    while会一直占用CPU,里面必须要有Sleep CPU才有机会去做你想要完成的事情