Revision: 43273
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at March 20, 2011 13:50 by liouys
Initial Code
#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 ) { cout << "Read com failed." << endl; return 0; } WaitForSingleObject( ov.hEvent, INFINITE ); GetOverlappedResult( g_hCom, &ov, &dwRead, TRUE ); } if( dwRead != strlen( g_pData ) ) { cout << "Failed to get all the data." << endl; return 0; } cout << "Read: " << szBuf << endl; 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 ) { cout << "Write com failed." << endl; return 0; } WaitForSingleObject( ov.hEvent, INFINITE ); GetOverlappedResult( g_hCom, &ov, &dwWritten, TRUE ); } if( dwWritten != strlen( g_pData ) ) { cout << "Failed to write all the data." << endl; return 0; } cout << "Write: " << g_pData << endl; Sleep( 100 ); return 1; }
Initial URL
Initial Description
Initial Title
windows下串å£é€šä¿¡åŒæ¥ä¸Žå¼‚æ¥æ–¹å¼
Initial Tags
windows
Initial Language
C