线程间通信的问题
需要完成的任务是:通过I/0卡控制两种光源的切换,这两种光源的照明时间不同,一个1s,一个3s
我采用两个线程分别控制这两种光源,定义了三个事件,分别代表光源1时间,光源道时间到和停止事件。
LightType标志光源类型。
线程代码:
UINT LaserTimeThread(LPVOID lpParameter)
{
CMy1View* myView=(CMy1View*)lpParameter;
int stop=::WaitForSingleObject(stopThread.m_hObject,0);
if(stop==WAIT_OBJECT_0)
return 0;
while(m_bIsRunning&&LightType!=0)
{
if(LightType==3)
{
Sleep(1000);
AfxMessageBox("Laser start");
LightType=1;
ThreadLED.SetEvent();
//LEDTimeThread(lpParameter);
}
else
{
if(LightType==2)
{
int result=::WaitForSingleObject(ThreadLaser.m_hObject,6000);
if(result==WAIT_OBJECT_0)
{
//myView->CommPmac.sendline(0,"M1=1");
Sleep(1000);
LightType=1;
AfxMessageBox("Laser");
ThreadLED.SetEvent();
}
else
{
AfxMessageBox("LED线程没有返回!");
}
}
}
}
return 0;
}
UINT LEDTimeThread(LPVOID lpParameter)
{
CMy1View* myView=(CMy1View*)lpParameter;
int stop=::WaitForSingleObject(stopThread.m_hObject,0);
if(stop==WAIT_OBJECT_0)
return 0;
while(m_bIsRunning&&LightType!=0)
{
if(LightType==1)
{
int result=::WaitForSingleObject(ThreadLED.m_hObject,2000);
if(result==WAIT_OBJECT_0)
{
//myView->CommPmac.sendline(0,"M1=2");
Sleep(3000);
LightType=2;
AfxMessageBox("LED ");
ThreadLaser.SetEvent();
}
else
{
AfxMessageBox("Laser线程没有返回!");
}
}
}
return 0;
}
void CMy1View::OnStopPipetest()
{
// TODO: Add your command handler code here
//关闭光源线程
stopThread.SetEvent();
LightType=0;
}
问题是:执行OnStopPipetest() 时,CPU竟然被占用%99
请问这是什么问题呀?