今天在调试我的串口扫描程序的停止问题,原来是用两个线程分别扫描设备与数据库的,扫描时跟据bScanBreak变量的值来确定是否结束,停止按钮设定bScanBreak的值。
bScanBreak = true;
bool bScanState = true;
while( bScanState)
{
Sleep(500);
bScanState = (bScanThread1 || bScanThread2);
}
SetCommMask(idComDev,0);
CloseHandle(idComDev);
idComDev = NULL;
看上去这段代码是没问题的,但是两个线程虽然停止了扫描但是没有执行完!(bScanThread1 ||
bScanThread2)的值始终没有修改,仔细检查也没有发现逻辑上的错误。最后怀疑到了Sleep,
我是使线程暂停一段时间,但是经过多次测试,Sleep放在主线程中,其它线程也会暂停,但只
要不在主线程中,不会对其它线程产生影响。
最后使用了一个Timer解决了问题!