我定义了一个线程工作函数
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后,要等几十秒铃声才停止!怎么回事呢????
敢请各位大侠指点!!谢谢!!!
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后,要等几十秒铃声才停止!怎么回事呢????
敢请各位大侠指点!!谢谢!!!
解决方案 »
- 请问怎么使一个模块满足下面这些需求?(多进程访问,唯一性,外部回调)
- 对话框程序,如何在指定区域改变光标形状
- 很久没来了散点分,顺便说点事情给大家听听
- 新手提问:如何用MENU{..}加载菜单?
- nID & 0xFFF0是啥意思?
- 如何将一个LPBYTE类型转换成CString类型?Unicode的
- 谁有抓屏的VC源代码,急。。。
- 在使用MSCOMM32通信时出现Variant array index out of bounds 请指点
- 关于截取CString的一部分的有趣的问题
- 关于socket的有意思的一个问题
- 用c编的程序怎么调用dll(也是c编的)文件?
- 继续刚才,我想创建窗口是就将它隐藏,如何操作,分数一起给
所以改成UINT ForBeep(LPVOID pParm)
{
while(TRUE)
{
MessageBeep(MB_OK);
Sleep(1);
}
return 0;
} 这样可以解决系统资源占用问题。
不过,要是我做。
我会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源码。