/ Published in: C
Expand |
Embed | Plain Text
#include <iostream> #include <windows.h> #include <assert.h> using namespace std; HANDLE g_hCom = INVALID_HANDLE_VALUE; const unsigned MAX_BUF_LEN = 32; const char* const g_pData = "hello"; DWORD WINAPI ThreadRead( LPVOID lpParameter ) { char szBuf[ MAX_BUF_LEN ] = { 0 }; DWORD dwRead; OVERLAPPED ov; memset( &ov, 0, sizeof( ov ) ); ov.hEvent = CreateEvent( NULL, TRUE, TRUE, NULL ); assert( ov.hEvent ); if( !ReadFile( g_hCom, szBuf, strlen( g_pData ), &dwRead, &ov ) ) { if( GetLastError() != ERROR_IO_PENDING ) { return 0; } WaitForSingleObject( ov.hEvent, INFINITE ); GetOverlappedResult( g_hCom, &ov, &dwRead, TRUE ); } if( dwRead != strlen( g_pData ) ) { return 0; } return 1; } int main() { g_hCom = CreateFile( "com1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL ); assert( g_hCom != INVALID_HANDLE_VALUE ); HANDLE hThread = CreateThread( NULL, 0, ThreadRead, NULL, 0, NULL ); assert( hThread ); Sleep( 100 ); DWORD dwWritten; OVERLAPPED ov; memset( &ov, 0, sizeof( ov ) ); ov.hEvent = CreateEvent( NULL, TRUE, TRUE, NULL ); assert( ov.hEvent ); if( !WriteFile( g_hCom, g_pData, strlen( g_pData ), &dwWritten, &ov ) ) { if( GetLastError() != ERROR_IO_PENDING ) { return 0; } WaitForSingleObject( ov.hEvent, INFINITE ); GetOverlappedResult( g_hCom, &ov, &dwWritten, TRUE ); } if( dwWritten != strlen( g_pData ) ) { return 0; } Sleep( 100 ); return 1; }
You need to login to post a comment.
