1. 程式人生 > >同步IO和非同步IO

同步IO和非同步IO

程式碼: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" ) ;}