我定义了一个线程工作函数  
UINT  ForBeep(LPVOID  pParm)  
{  
           while(TRUE)  
               MessageBeep(MB_OK);  
           return  0;  
}  
 
然后  
void  CE10_1View::OnInitialUpdate()    
{  
           CView::OnInitialUpdate();  
             
           //  TODO:  Add  your  specialized  code  here  and/or  call  the  base  class  
       pForBeepThread=AfxBeginThread(ForBeep,GetSafeHwnd(),THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);
}  
 
当执行  
void  CE10_1View::OnBegin()    
{  
           //  TODO:  Add  your  command  handler  code  here  
           pForBeepThread->ResumeThread();  
                         
}  
 
时,响呤响个不停,可是执行下面程序
void CE10_1View::OnPause() 
{
// TODO: Add your command handler code here
pForBeepThread->SuspendThread();

}void CE10_1View::OnStop() 
{
// TODO: Add your command handler code here
TerminateThread(pForBeepThread->m_hThread,0);


}
系统还是响个不停,其它程序几乎不能运行,关闭VC后,要等几十秒铃声才停止!怎么回事呢????
 
敢请各位大侠指点!!谢谢!!!

解决方案 »

  1.   

    因为Beep是阻塞的,
    所以改成UINT  ForBeep(LPVOID  pParm)  
    {  
               while(TRUE)
               {
                   MessageBeep(MB_OK);  
                   Sleep(1);
               }
               return  0;  
    }  这样可以解决系统资源占用问题。
      

  2.   

    楼上的朋友,改了之后还是同原来一样!!???不解!!!再改为 MessageBeep(1000),也不行!!!我的系统 Win2K+VC6,请指点指点!!!!
      

  3.   

    不把afxbeginthread放在intialupdate里头试试。
      

  4.   

    Sleep(1)太短了,Sleep(500)就差不多了。不行就改Sleep(1000).
    不过,要是我做。
    我会OnBegin()时创建时钟,然后再时钟函数中向该线程发一条自定义消息,比如WM_USER+200
    线程内部消息循环。
    UINT  ForBeep(LPVOID  pParm)  
    {
        MSG msg;
        while(GetMessage(&mag,NULL,NULL,NULL)
        {
            if(msg.message==WM_USER+200)
                MessageBeep(MB_OK);
        }
    }  
    调整时钟间隔可以调整声音的效果。不要发的太高频率,以免消息堆积。
    主要你一定要学会让线程可以空闲下来。 GetMessage是一种方法,Sleep
    是一个蠢方法,我跟人认为CWinThread::Run里面处理的最好。不妨看看MFC源码。
      

  5.   

    赞同wowuyinglingluan(我舞影凌乱),MessageBox(...)等,都是会使线程暂停,sleep时间长点的话...sleep时消息能正常接受的.