UINT CPort::PortFunc(PVOID pv){
CPort* pPort = (CPort*) pv;
OVERLAPPED ol ;
DWORD dwMask, dwTransfer;
memset(&ol,0,sizeof(OVERLAPPED));
if ((ol.hEvent = CreateEvent(0,TRUE,FALSE,0)) == NULL){
pPort->Err("CreateEvent");
return 1;
}
while (pPort->_pData->_bGoOn){
dwMask = 0 ;
if (!WaitCommEvent(pPort->_pData->_hPort,&dwMask,&ol) &&
ERROR_IO_PENDING == GetLastError()){
GetOverlappedResult(pPort->_pData->_hPort, &ol,
&dwTransfer, TRUE);
ol.Offset += dwTransfer ;
};
if ((dwMask & EV_RXCHAR) == EV_RXCHAR ){
ResetEvent(pPort->_pData->_hEvNot);
((CWnd*)pPort->_pData->_pWnd)->
PostMessage(WM_SERIAL_PORT, (WPARAM)pPort,
(LPARAM)EV_RXCHAR);
WaitForSingleObject(pPort->_pData->_hEvNot,
INFINITE);
};
};
CloseHandle(ol.hEvent);
return 0;
};