首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

简单有关问题:关于多线程

2012-03-03 
简单问题:关于多线程我主界面有一个函数main()其中有一段程序:for(inty0y 6000y++){if(RevThread- B

简单问题:关于多线程
我主界面有一个函数main();其中有一段程序:
for(int   y=0;y <6000;y++)
{
    if(RevThread-> Brev==0)
        Sleep(1);
    else
        break;
}
我的线程RevThread收到串口通讯消息后将Brev值写1。函数main()等待Brev值不为0时再进入下一步操作。可是我这样写,调试的时候发现必须等函数main()执行完毕线程才将Brev值写1。与我的Sleep时间无关。我该怎样改呢?

[解决办法]
在循环中加这一句试试:
Application-> ProcessMessages();
[解决办法]
将 你的代码 :
for(int y=0;y <6000;y++)
{
if(RevThread-> Brev==0)
Sleep(1);
else
break;
}

改成 :

建立一个事件的全局变量或者通过参数传递给线程 :
HANDLE hReady = CreateEvent( " ",true,false,0); // 注意这个事件是手动恢复的,
// 并且初始化成无信号的

1 :
将你的循环代码改成 :
WaitForSingleObject(hReady,INITINF);
ResetEvent(hReady); // 将事件设置成为无信号
// DO SOMETHING CONTINUE

2 在线程里处理这个事件 :
// 收到数据后,置事件为有信号
SetEvent(hReady);
// Do Anything Continue

热点排行