需求是要不停的向10台机器发送命令来读某些探测值。
启动了一个线程,主函数是
UINT CommRequestProc(HWND hDlg)
{
try
{
BYTE iLoop = 0;
for (;;)
{
for (iLoop = 1; iLoop <= 10; iLoop++)
{
SndGetLogCmd(iLoop);
}
                        Sleep(100);//问题出在这里!!!
}
}
catch (...)
{
}
return 0;
}
BOOL SndGetLogCmd(BYTE machineNo)
{
try
{
...//向lpBuffer中写数据 OVERLAPPED m_osWrite;
memset(&m_osWrite, 0, sizeof(m_osWrite));
COMSTAT ComStat;
DWORD dwErrorFlags;
BOOL bWriteStat;
ClearCommError(hCom, &dwErrorFlags, &ComStat);
bWriteStat = WriteFile(hCom, lpBuffer, dwBytesWrite, &dwBytesWrite, &m_osWrite);
if(!bWriteStat)
{
if(GetLastError() == ERROR_IO_PENDING)
{
WaitForSingleObject(m_osWrite.hEvent, 1000);
}
}
}
catch (...)
{
}
        return TRUE;
}线程中的Sleep为的是降低CPU的占用率。但第一次循环完10台机器后Sleep就出错了
请问这是怎么回事呢?

解决方案 »

  1.   

    0x00000000
    报错时出现这个,一般就是访问了使用NULL初始化后未赋值的指针
    sleep没错,大概是该线程sleep时其他线程出了错
      

  2.   


    我也这么想,把循环中SndGetLogCmd注掉就没错了,可能是Sleep影响了串口写操作。但是怎么影响或者怎么解决问题不知道哩!
      

  3.   

    m_osWrite.hEvent 为空句柄 需要 CreateEvent
      

  4.   


    CreateEvent(NULL, TRUE, FALSE, NULL)
    不行哩,
      

  5.   

    CreateEvent(NULL, FALSE, FALSE, NULL)再不行 异常时 点那个中断, 把调用堆栈贴出来看看
      

  6.   

    异常时 hCom, lpBuffer, dwBytesWrite, 分别是什么值?
      

  7.   


    hCom == 0x000000D8。
    lpBuffer和dwBytesWrite是在Snd函数里,程序崩溃时断点在Sleep上,所以这两个不在栈里。