成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

點(diǎn)對(duì)點(diǎn)消息隊(duì)列函數(shù):用于WinCE的IPC機(jī)制

開(kāi)發(fā)
本文以一個(gè)易于了解的方式描述點(diǎn)對(duì)點(diǎn)消息隊(duì)列函數(shù)。這是個(gè)IPC機(jī)制,它高效、靈活,并且專用于 Windows CE 4.0 及其更高版本。

本文說(shuō)明點(diǎn)對(duì)點(diǎn)消息隊(duì)列 — 一個(gè)鮮為人知的 IPC 機(jī)制,它高效、靈活,并且專用于 Windows CE 4.0 及其更高版本。此外,本文還說(shuō)明如何設(shè)計(jì)和使用托管包裝,使 .NET Compact Framework 應(yīng)用程序中的 IPC 極其簡(jiǎn)便。

開(kāi)發(fā)人員能夠以多種方式使用點(diǎn)對(duì)點(diǎn)消息隊(duì)列。開(kāi)發(fā)人員通常在無(wú)法宿主 .NET Compact Framework 運(yùn)行庫(kù)的情況下使用 IPC 作為替代方案(本機(jī)進(jìn)程通過(guò) IPC 與托管進(jìn)程進(jìn)行通訊),并且點(diǎn)對(duì)點(diǎn)消息隊(duì)列是***選擇。點(diǎn)對(duì)點(diǎn)消息隊(duì)列還可以與操作系統(tǒng)進(jìn)行交互,例如,用于獲取電源信息。本文不介紹點(diǎn)對(duì)點(diǎn)消息隊(duì)列的其他用途,這些用途留待您了解核心原理之后自行探究。

本部分以一個(gè)您易于了解的方式描述點(diǎn)對(duì)點(diǎn)消息隊(duì)列函數(shù)。

當(dāng)開(kāi)發(fā)人員使用 IPC 時(shí),一個(gè)進(jìn)程創(chuàng)建用于寫(xiě)入的隊(duì)列,另一個(gè)進(jìn)程創(chuàng)建用于讀取的隊(duì)列 (CreateMsgQueue)。在雙向 IPC 通訊中,開(kāi)發(fā)人員在通訊的每一端(在兩個(gè)獨(dú)立的進(jìn)程間或同一進(jìn)程的兩個(gè)對(duì)象間)都需要兩個(gè)隊(duì)列。

在使用點(diǎn)對(duì)點(diǎn)消息隊(duì)列時(shí),開(kāi)發(fā)人員可以采用若干種方法。例如,有用于讀取 (ReadMsgQueue)、寫(xiě)入 (WriteMsgQueue) 和關(guān)閉隊(duì)列 (CloseMsgQueue) 的方法。此外,如果除了隊(duì)列句柄之外,開(kāi)發(fā)人員還具有擁有該隊(duì)列的源進(jìn)程的句柄,那么他們就可以打開(kāi)現(xiàn)有隊(duì)列 (OpenMsgQueue)。開(kāi)發(fā)人員可以查詢一些統(tǒng)計(jì)信息 (GetMsgQueueInfo),***可以使他們的應(yīng)用程序等待隊(duì)列句柄 (WaitForSingleObject) 接收信號(hào),以便確定隊(duì)列中是否有數(shù)據(jù)。

打開(kāi)一個(gè)現(xiàn)有隊(duì)列時(shí),開(kāi)發(fā)人員只能指定一個(gè)選項(xiàng) — 該隊(duì)列是用于讀還是用于寫(xiě)。當(dāng)創(chuàng)建隊(duì)列時(shí),開(kāi)發(fā)人員可以指定其他參數(shù):名稱 (lpszName) 和選項(xiàng)(類型為 MSGQUEUOPTIONS 的 lpOptions)。隊(duì)列選項(xiàng)包括以下內(nèi)容:?jiǎn)蝹€(gè)消息的***大小 (cbMaxMessage)、隊(duì)列中消息的隨機(jī)***數(shù)量 (dwMaxMessages)、是否應(yīng)該動(dòng)態(tài)分配緩沖區(qū)(dwFlags、MSGQUEUE_NOPRECOMMIT),以及閱讀器是否可以在沒(méi)有編寫(xiě)器的情況下存在(dwFlags、MSGQUEUE_ALLOW_BROKEN),反之亦然。關(guān)閉隊(duì)列時(shí),開(kāi)發(fā)人員將句柄作為參數(shù) ( hMsgQ )。

寫(xiě)入隊(duì)列需要一個(gè)指針 ( lpBuffer )、消息中的字節(jié)數(shù) ( cbDataSize )、超時(shí) ( dwTimeout ),以及該消息是否是一個(gè)警告消息( dwFlags 、MSGQUEUE_MSGALERT)。從隊(duì)列讀取需要:傳入一個(gè)緩沖區(qū) (lpBuffer)、緩沖區(qū)的大小 ( cbBufferSize ),以及一個(gè)超時(shí)值 ( dwTimeout );因此,可獲悉實(shí)際字節(jié)數(shù) ( lpNumberOfBytesRead ) 以及該消息是否為一個(gè)警告( pdwFlags 、MSGQUEUE_MSGALERT)。注意,超時(shí)是以毫秒計(jì)算的;0 表示“不阻塞”,而 INFINITE (-1) 表示“阻塞,直到操作完成或隊(duì)列狀態(tài)更改”。如果成功,讀函數(shù)和寫(xiě)函數(shù)都返回 TRUE;否則,返回 FALSE。在后一種情況中,您可以獲得擴(kuò)展的錯(cuò)誤信息 (GetLastError)。函數(shù)返回 FALSE 的可能原因有:緩沖區(qū)太小 (ERROR_INSUFFICIENT_BUFFER);沒(méi)有編寫(xiě)器或閱讀器,且開(kāi)發(fā)人員未按前面段落中所述的那樣指定 MSGQUEUE_ALLOW_BROKEN (ERROR_PIPE_NOT_CONNECTED);或者發(fā)生超時(shí) (ERROR_TIMEOUT)。對(duì)于 WriteMsgQueue,如果未按前面段落中所述的那樣指定 MSGQUEUE_NOPRECOMMIT,則也可能得到錯(cuò)誤 ERROR_OUTOFMEMORY。

可調(diào)用 GetMsgQueueInfo 來(lái)獲得包含統(tǒng)計(jì)信息的結(jié)構(gòu) (MSGQUEUEINFO)。該結(jié)構(gòu)包含的信息包括開(kāi)發(fā)人員在創(chuàng)建隊(duì)列時(shí)傳入的一些參數(shù):消息的***大小 (cbMaxMessage)、消息的***數(shù)量 (dwMaxMessages)、是否應(yīng)該動(dòng)態(tài)分配緩沖區(qū)(dwFlags、MSGQUEUE_NOPRECOMMIT),以及閱讀器是否可以在沒(méi)有編寫(xiě)器的情況下存在(dwFlags、MSGQUEUE_ALLOW_BROKEN),反之亦然。此外,該結(jié)構(gòu)還包含以下內(nèi)容:當(dāng)前隊(duì)列中非警告信息的數(shù)量 (dwCurrentMessages)、隊(duì)列中曾經(jīng)存在消息的***數(shù)量 (dwMaxQueueMessages)、當(dāng)前閱讀器的數(shù)量 (wNumReaders),以及當(dāng)前編寫(xiě)器的數(shù)量 (wNumWriters)。

【編輯推薦】

  1. ASP.NET中無(wú)Cookie會(huì)話的優(yōu)點(diǎn)與缺點(diǎn)
  2. 無(wú)Cookie會(huì)話的實(shí)現(xiàn)
  3. ASP.NET Cookie:不是問(wèn)題的問(wèn)題
  4. .NET框架中的XML:XmlSerializer的內(nèi)部原理
  5. .NET框架中的XML基礎(chǔ)類:xsd.exe
責(zé)任編輯:yangsai 來(lái)源: MSDN
相關(guān)推薦

2009-08-06 16:21:09

點(diǎn)對(duì)點(diǎn)消息隊(duì)列

2017-05-15 19:40:40

AndroidIPC機(jī)制

2017-10-11 15:08:28

消息隊(duì)列常見(jiàn)

2009-07-17 13:38:32

OEMIoControWinCE

2011-05-31 11:55:00

Android 消息機(jī)制

2023-07-10 09:18:39

Redis訂閱模型

2010-04-21 14:49:13

Unix消息隊(duì)列

2018-04-26 15:18:49

RTOS應(yīng)用MPU

2021-03-11 06:01:41

Linux消息隊(duì)列

2025-01-02 09:23:05

2023-12-18 08:36:39

消息隊(duì)列微服務(wù)開(kāi)發(fā)

2022-12-13 09:19:26

分布式消息隊(duì)列

2023-10-09 08:24:54

IPC機(jī)制Binder

2024-05-10 09:36:36

架構(gòu)消息隊(duì)列

2023-12-30 13:47:48

Redis消息隊(duì)列機(jī)制

2019-07-19 07:56:13

消息隊(duì)列消息代理消息中間件

2024-06-25 08:29:23

Android系統(tǒng)休眠

2021-02-19 09:19:11

消息隊(duì)列場(chǎng)景

2009-11-09 11:15:06

WCF消息隊(duì)列

2010-04-13 17:00:43

Unix消息隊(duì)列
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 日本人和亚洲人zjzjhd | 精品视频在线观看 | 九九99精品| 免费99视频| 中文字幕视频在线观看 | 在线观看国产www | 成人一区二区在线 | 欧美精品二区 | 黑人巨大精品欧美一区二区免费 | 男女午夜激情视频 | 日日夜夜精品免费视频 | 国内自拍第一页 | 一区二区三区亚洲视频 | 91精品久久久久久久久久入口 | 国产成人精品午夜视频免费 | 久久y| 极品久久 | 人操人人干人 | 91视频网址 | 国产一区影院 | 久久精品久久久久久 | 欧美一区二区视频 | 日韩免费视频 | 欧美综合一区二区三区 | 狠狠操天天干 | 黄色片视频免费 | 中文字幕国产高清 | 91精品一区 | 一区二区三区四区国产 | 午夜影院在线观看 | 亚洲视频一区 | 欧美亚洲网站 | 日韩国产欧美在线观看 | 久久成人综合 | 精品亚洲一区二区 | 一区二区三区国产好的精 | 久久国产一区二区三区 | 亚洲国产精品一区二区第一页 | 久久激情av| 亚洲精品一区二区冲田杏梨 | 国产日韩精品在线 |