国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Windows核心編程(第五版)筆記 第十章 同步和異步設(shè)備I/O(Synchronous...

第十章 同步和異步設(shè)備I/O

1.打開和關(guān)閉設(shè)備對(duì)象

            打開設(shè)備

                            CreateFile CreateMailslot CreateNamedPipe CreatePipe

            關(guān)閉設(shè)備

                            CloseHandle CloseSocket

            查看設(shè)備類型

                            GetFileType

2.文件設(shè)備

         Code example:

                            HANDLE hFile = CreateFile(...);

                   BYTE pb[10];

                   DWORD dwNumBytes;

 

                            ReadFile(hFile1, pb, 10, &dwNumBytes, NULL);

 

                            LARGE_INTEGER liDistanceToMove;

                            liDistanceToMove.QuadPart = 1024;

 

                            SetFilePointerEx(hFile, liDistanceToMove, NULL, FILE_BEGIN);

                            SetEndOfFile(hFile);

 

                            CloseHandle(hFile);

3.同步設(shè)備I/O

ReadFile

            僅當(dāng)設(shè)備以GENERIC_READ方式打開時(shí)才可調(diào)用ReadFile

WriteFile

            僅當(dāng)設(shè)備以GENERIC_WRITE方式打開時(shí)才可調(diào)用WriteFile

FlushFileBuffers

            強(qiáng)迫系統(tǒng)將緩沖區(qū)的數(shù)據(jù)寫設(shè)備。

CancelSynchronousIo

          如果某個(gè)線程因等待I/O操作而掛起太長時(shí)間,可以調(diào)用該函數(shù)使線程從I/O操作中返回。GetLastError可以取得錯(cuò)誤代碼。

           該線程必須符合以下兩個(gè)條件中的一個(gè):

           (1)該線程是則CreateThread_beginThread函數(shù)創(chuàng)建

           (2)該線程則OpenThread創(chuàng)建且具有THREAD_TERMINATE權(quán)限

 

I/O設(shè)備Cancel請(qǐng)求操作最終則設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)。若設(shè)備驅(qū)動(dòng)不支持I/O Cancel.那么CancelSynchronouslo永遠(yuǎn)返回True.

 

 

4.異步設(shè)備I/O基本概念

(1)異步請(qǐng)求要求用CreateFileFILE_FLAG_OVERLAPPEDOVERLAPPED結(jié)構(gòu)體為參數(shù)打開設(shè)備,

(2)OVERLAPPED(重迭)結(jié)構(gòu)體

 

typedef struct _OVERLAPPED

 {

   DWORD Internal;     // [out] Error code

   DWORD InternalHigh; // [out] Number of bytes transferred

   DWORD Offset;       // [in] Low 32-bit file offset

   DWORD OffsetHigh;   // [in] High 32-bit file offset

   HANDLE hEvent;       // [in] Event handle or data

} OVERLAPPED, *LPOVERLAPPED;

 

   OVERLAPPED的意思是線程執(zhí)行I/O請(qǐng)求的時(shí)間與線程執(zhí)行其它任務(wù)的時(shí)間是重迭的。

   該結(jié)構(gòu)體用于指定讀、寫文件時(shí)的起始地址,也就是讀、寫文件時(shí)的偏移值。該偏移值(64)OffsetOffsetHigh共指定。

該結(jié)構(gòu)體在使用時(shí)一定要先初始化其中三個(gè)變量Offset, OffsetHigh, and hEvent

            HasOverlappedIoCompleted宏用于判斷I/O請(qǐng)求是否執(zhí)行完畢

(3)取消異步請(qǐng)求

            BOOL CancelIo(HANDLE hFile);

            BOOL CancelIoEx(HANDLE hFile, LPOVERLAPPED pOverlapped);.

 

5.獲取I/O操作完畢通知

有以下四種方法:

(1)通過設(shè)備內(nèi)核對(duì)象獲取通知

            設(shè)備對(duì)象也是內(nèi)核對(duì)象。在調(diào)用ReadFileWriteFile時(shí),設(shè)備對(duì)象會(huì)被置成Non-Signal狀態(tài)。當(dāng)完成讀、寫操作后設(shè)備對(duì)象會(huì)被置成Signal狀態(tài)。

               因此可以用WaitForSingleObject WaitForMultipleObject獲取I/O操作完畢的通知。

 

(2)事件內(nèi)核對(duì)象

           OVERLAPPED結(jié)構(gòu)體中有一個(gè)成員是Event對(duì)象的句柄。當(dāng)I/O操作完畢后 相應(yīng)的OVERLAPPED對(duì)象中Event對(duì)象句柄所指向的對(duì)象也會(huì)被置成Signal狀態(tài)。

       因此,當(dāng)同時(shí)有多個(gè)I/O異步請(qǐng)求時(shí),通過WaitForMultipleObject等待每個(gè)I/O操作中所對(duì)應(yīng)的OVERLAPPED對(duì)象的Event句柄即可獲得I/O操作完畢的通知。

 

6.Common API

            CreateFile CreateMailslot CreateNamedPipe CreatePipe

            GetFileType

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
《Windows核心編程系列》十談?wù)????同步設(shè)備IO與異步設(shè)備IO之異步IO
Windows系統(tǒng)編程之異步I/O和完成端口
Windows API串口編程參考
串行通信與重疊(異步)I/O
OVERLAPPED 與 FILE
串口通信CSerialPort類WriteToPort不能連續(xù)發(fā)送的問題
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服