使用MFC循环写串口时Sleep报错解决思路

使用MFC循环写串口时Sleep报错
需求是要不停的向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就出错了使用MFC循环写串口时Sleep报错解决思路
请问这是怎么回事呢?

------解决方案--------------------
m_osWrite.hEvent 为空句柄 需要 CreateEvent