同步IO和非同步IO
阿新 • • 發佈:2018-12-19
程式碼:VOID WINAPI APC_A ( DWORD dwError, DWORD cbTransferred, LPOVERLAPPED lpo ){ pTempInfo.push_back ( "執行IO_A的完成例程" ) ;}VOID WINAPI APC_B ( DWORD dwError, DWORD cbTransferred, LPOVERLAPPED lpo ){ pTempInfo.push_back ( "執行IO_B的完成例程" ) ;}VOID WINAPI APC_C ( DWORD dwError, DWORD cbTransferred, LPOVERLAPPED lpo ){ pTempInfo.push_back ( "執行IO_C的完成例程" ) ;}void CCompletionRoutineDlg::OnTest() { // TODO: Add your control notification handler code here HANDLE hFile_A, hFile_B, hFile_C ; OVERLAPPED ov_A = {0}, ov_B = {0}, ov_C = {0} ;#define C_SIZE 1024 * 1024 * 32 string szText_A = "Sample A !" ; string szText_B = "Sampel B !" ; string szText_C ; szText_C.resize ( C_SIZE ) ; memset ( &(szText_C[0]), 0x40, C_SIZE ) ; pTempInfo.clear () ; hFile_A = CreateFile ( "A.txt", GENERIC_WRITE, 0, NULL, / CREATE_ALWAYS, FILE_FLAG_OVERLAPPED, NULL ) ; hFile_B = CreateFile ( "B.txt", GENERIC_WRITE, 0, NULL, / CREATE_ALWAYS, FILE_FLAG_OVERLAPPED, NULL ) ; hFile_C = CreateFile ( "C.txt", GENERIC_WRITE, 0, NULL, / CREATE_ALWAYS, FILE_FLAG_OVERLAPPED, NULL ) ; WriteFileEx ( hFile_A, &(szText_A[0]), szText_A.length(), &ov_A, APC_A ) ; pTempInfo.push_back ( "啟動IO_A, 並立即返回" ) ; WriteFileEx ( hFile_B, &(szText_B[0]), szText_B.length(), &ov_B, APC_B ) ; pTempInfo.push_back ( "啟動IO_B, 並立即返回" ) ; WriteFileEx ( hFile_C, &(szText_C[0]), szText_C.size(), &ov_C, APC_C ) ; pTempInfo.push_back ( "啟動IO_C, 並立即返回" ) ; pTempInfo.push_back ( "進入可變等待狀態" ) ; SleepEx ( 1, true ) ; pTempInfo.push_back ( "結束可變等待狀態" ) ; pTempInfo.push_back ( "進入可變等待狀態" ) ; SleepEx ( 10000, true ) ; pTempInfo.push_back ( "結束可變等待狀態" ) ; CloseHandle ( hFile_A ) ; CloseHandle ( hFile_B ) ; CloseHandle ( hFile_C ) ; m_ListBox.ResetContent () ; list<string>::iterator p ; for ( p = pTempInfo.begin(); p != pTempInfo.end(); p++ ) { m_ListBox.AddString ( p->data() ) ; } DeleteFile ( "A.txt" ) ; DeleteFile ( "B.txt" ) ; DeleteFile ( "C.txt" ) ;}