简单问题:关于多线程
我主界面有一个函数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