freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

同步異步設(shè)備io-資料下載頁

2025-08-04 14:53本頁面
  

【正文】 如果以同步方式執(zhí)行ReadFile/WriteFile,成功則返回非零值,失敗返回FALSE;如果以異步方式執(zhí)行,執(zhí)行成功也會(huì)返回FALSE,利用GerLastError可以查看錯(cuò)誤代碼ERROR_IO_PENDING則表示異步I/O請(qǐng)求已被成功加入了隊(duì)列,會(huì)在晚些時(shí)候執(zhí)行。3. 在異步I/O請(qǐng)求完成前,一定不能移動(dòng)或是銷毀在發(fā)出I/O請(qǐng)求時(shí)所使用的數(shù)據(jù)緩存和OVERLAPPED結(jié)構(gòu)。4. 我們必須為每一個(gè)I/O請(qǐng)求分配并初始化一個(gè)不同的OVERLAPPED結(jié)構(gòu) 接收I/O請(qǐng)求完成通知這部分內(nèi)容主要回到設(shè)備驅(qū)動(dòng)如何告知線程I/O處理完的問題。Windows提供了四種方法,由易到難是觸發(fā)設(shè)備內(nèi)核對(duì)象;觸發(fā)事件內(nèi)核對(duì)象;可提醒I/O;I/O完成端口。應(yīng)該說,I/O完成端口屬于目前最完美的技術(shù),但是對(duì)于當(dāng)前自己的程序而言不需要,所以只需要使用簡(jiǎn)單的設(shè)備內(nèi)核對(duì)象或者事件內(nèi)核對(duì)象就可以實(shí)現(xiàn)設(shè)備I/O請(qǐng)求的送達(dá)。l 觸發(fā)設(shè)備內(nèi)核對(duì)象由于文件本身即是一種內(nèi)核對(duì)象,觸發(fā)規(guī)則為:有待處理的I/O請(qǐng)求時(shí)為未觸發(fā)狀態(tài),I/O請(qǐng)求處理完成時(shí)為觸發(fā)狀態(tài)。因而我們只需要使用WaitForSingleObject(hFile, INFINITE)一個(gè)語句即可,當(dāng)然這個(gè)語句要放到一定代碼之后,估計(jì)I/O請(qǐng)求處理完畢之后再進(jìn)入檢查文件是否觸發(fā)。我們給出一個(gè)示例代碼HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...)。BYTE bBuffer[100]。OVERLAPPED ol = {0}。 = 345。BOOL bReadDone = ReadFile(hFile, bBuffer, 100, NULL, amp。ol)。DWORD dwError = GetLastError()。If (!bReadDone amp。amp。 (dwError == ERROR_IO_PENDING) ) { WaitForSingleObject(hFile, INFINITE)。 bReadDone = TRUE。}l 觸發(fā)事件內(nèi)核對(duì)象只需要將文件內(nèi)核對(duì)象改為事件內(nèi)核對(duì)象就可以了,這里需要注意的是此時(shí)OVERLAPPED結(jié)構(gòu)的最后一個(gè)成員hEvent需要和我們的事件內(nèi)核對(duì)象綁定起來,我們給出一個(gè)方法來同時(shí)執(zhí)行多個(gè)異步設(shè)備I/O操作并使用同一個(gè)設(shè)備對(duì)象。HANDLE hFile = CreateFile(..., FILE_FLAG_OVERLAPPED, ...)。BYTE bReadBuffer[10]。OVERLAPPED oRead = {0}。 = 0。 = CreateEvent(...)。ReadFile(hFile, bReadBuffer, 10, NULL, amp。oRead)。BYTE bWriteBuffer[10] = {0, 1,2, 3, 4, 5, 6, 7, 8, 9}。OVERLAPPED oWrite = {0}。 = 0。 = CreateEvent(...)。WriteFile(hFile, bWriteBuffer, _countof(bWriteBuffer), NULL, amp。oWrite)。... ... ...HANDLE h[2]。H[0] = 。H[1] = 。DWORD dw = WaitForMultipleObjects(2, h, FALSE, INFINITE)。Switch (dw WAIT_OBJECT_0){Case 0: //Read pletedbreadk。Case 1: //Write pletedBreak。}
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1