线程间通信的问题

allinsa 2005-07-20 09:02:35
需要完成的任务是:通过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
请问这是什么问题呀?
...全文
84 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
allinsa 2005-07-20
  • 打赏
  • 举报
回复
好像是,我将WHILE改成if就可以了
现在好了
谢谢
fairyprince 2005-07-20
  • 打赏
  • 举报
回复
你给出的代码不全,目前来说

int result=::WaitForSingleObject(ThreadLED.m_hObject,2000);
if(result==WAIT_OBJECT_0)
…………
LightType=2;
…………


int result=::WaitForSingleObject(ThreadLaser.m_hObject,6000);
if(result==WAIT_OBJECT_0)
…………………
LightType=1;


检查一下,是不是在超时返回后
进入死循环

fairyprince 2005-07-20
  • 打赏
  • 举报
回复
检查你的 while 过程,肯定是进入死循环了

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧