亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

詳解Visual C++事件編程

2023-06-06 12:10:46
字體:
供稿:網(wǎng)友

在微軟 .NET 框架中可以定義托管類事件并用委托和 += 操作符處理這些事件。這種機(jī)制似乎很有用,那么在本機(jī) C++ 中有沒有辦法做同樣的事情?

確實(shí)如此!Visual C++ .NET 具備所謂統(tǒng)一事件模型(Unified Event Model),它可以像托管類一樣實(shí)現(xiàn)本機(jī)事件(用 __event 關(guān)鍵字),但是由于本機(jī)事件存在一些不明顯的技術(shù)問題,而微軟的老大不打算解決這些問題,所以他們要我正式奉勸你不要使用它們。那么這是不是就是說 C++ 程序員與事件無緣了呢?當(dāng)然不是!可以通過別的方法實(shí)現(xiàn)。本文我將向你展示如何輕松實(shí)現(xiàn)自己漂亮的事件系統(tǒng)。

但是在動(dòng)手之前,讓我先大體上介紹一下事件和事件編程。它是個(gè)重要的主題,當(dāng)今對(duì)事件沒有堅(jiān)實(shí)的理解,你是無法編寫程序的——什么是事件以及什么時(shí)候使用事件。

成功的編程完全在于對(duì)復(fù)雜性的掌控。很久以前,函數(shù)被稱為“子程序”(我知道,我這樣說證明我已經(jīng)老了!)管理復(fù)雜性的主要方式之一是自頂向下的編程模式。高層實(shí)現(xiàn)類似“宇宙模型”,然后將它劃分為更小的任務(wù)如:“銀河系模型”以及“太陽系模型”等等,直到任務(wù)被劃分為可以用單個(gè)函數(shù)實(shí)現(xiàn)為止。目前自頂向下的編程模型仍被用于過程化的任務(wù)實(shí)現(xiàn)當(dāng)中,但它不適用于發(fā)生順序不確定的實(shí)時(shí)事件響應(yīng)系統(tǒng)。經(jīng)典的例子便是 GUI,程序必須響應(yīng)用戶的某些行為,比如按鍵或是鼠標(biāo)移動(dòng)。實(shí)際上,事件編程很大程度上源于圖形用戶界面的出現(xiàn)。

在自頂向下的模型中,在頂部的高級(jí)部分對(duì)低級(jí)的實(shí)現(xiàn)各種不同任務(wù)的函數(shù)——如 DoThis,DoThat 進(jìn)行食物鏈?zhǔn)降恼{(diào)用。但不久以后,低層部分需要回調(diào)(talk back),在 Windows 中,可以調(diào)用 Rectangle 或 Ellipse 繪制一個(gè)矩形或橢圓,但最終 Windows 需要調(diào)用你的應(yīng)用程序來畫窗口。但應(yīng)用程序都還不存在,它仍然處于被調(diào)用度狀態(tài)!那么 Windows 如何知道要調(diào)用哪個(gè)函數(shù)呢?這就是事件用處之所在。


Figure 1 自頂向下和自底向上

在每個(gè) Windows 程序的核心——不論是直接用 C 語言編寫的還是使用 MFC 或 .NET 框架類編寫——都是一個(gè)處理消息的窗口過程,這些消息如:WM_PAINT, WM_SETFOCUS 和 WM_ACTIVATE。你(MFC 或 .NET)實(shí)現(xiàn)窗口過程并將它傳遞給 Windows。到了該畫窗口,改變輸入焦點(diǎn)以及激活窗口的時(shí)候,Windows 用相應(yīng)的消息代碼調(diào)用你的過程。這個(gè)消息就是事件。窗口過程就是事件處理器。如果過程化編程是自頂向下的,事件編程是自底向上。在典型的軟件系統(tǒng)中,函數(shù)的調(diào)用流是從較高級(jí)部分到低級(jí)部分進(jìn)行的;而事件是以相反的方向過濾的,如Figure 1 所示。當(dāng)然,在現(xiàn)實(shí)的開發(fā)中層次關(guān)系并不總是這么清晰。許多軟件系統(tǒng)看起來更像 Figure 2 所示的情況:


Figure 2 混合模型

那么到底什么叫事件?其實(shí),事件就是回調(diào)。而不是在編譯時(shí)就已知名字的函數(shù)調(diào)用,組件調(diào)用在運(yùn)行時(shí)調(diào)用你提供的函數(shù)。在 Windows 中,它是一個(gè)窗口過程。在 .NET 框架中,它叫做委托。不管術(shù)語怎么叫,事件提供了一種軟件組件調(diào)用函數(shù)的方式,這種調(diào)用方式直到運(yùn)行時(shí)才知道要調(diào)用什么函數(shù)?;卣{(diào)被稱為事件處理器。發(fā)生或觸發(fā)一個(gè)事件意味調(diào)用這個(gè)事件處理器。為此,事件接收部分首先得給事件源提供一個(gè)事件處理器的指針,這個(gè)過程叫注冊(cè)。

通常在以下幾種場(chǎng)合下我們要使用事件:

通知客戶機(jī)實(shí)際的事件:用戶按下某個(gè)按鍵;午夜時(shí)鐘敲響;風(fēng)扇停止工作造成 CPU 燒毀;

當(dāng)拷貝文件或搜索巨型數(shù)據(jù)庫時(shí),報(bào)告耗時(shí)操作的過程,組件可以周期性地觸發(fā)某個(gè)事件以報(bào)告已拷貝了多少文件或已搜索了多少記錄;如果你使用 IWebBrowser2 在自己的應(yīng)用程序中宿主 IE,報(bào)告所發(fā)生的重要的或引起注意的事件,瀏覽器會(huì)在導(dǎo)航到某個(gè)新頁面之前或之后通知你,或者在創(chuàng)建一個(gè)新窗口時(shí)通知你。

調(diào)用應(yīng)用程序提供的算法:C 運(yùn)行時(shí)庫函數(shù) qsort 排序?qū)ο髷?shù)組,但你必須提供比較函數(shù)。借助許多 STL 容器也能實(shí)現(xiàn)同樣的訣竅.大多數(shù)程序員不會(huì)調(diào)用 qsort 回調(diào)某個(gè)事件,但你沒有理由不考慮那種方式。它是“時(shí)間比較”事件。

一些讀者問:異常和事件之間有什么差別?主要差別是:異常表示不應(yīng)該發(fā)生的意外情況。例如,你的程序運(yùn)行耗盡內(nèi)存,或者遇到被零除。這些都是你并不希望發(fā)生的異常情況,并且一旦出現(xiàn)這些情況,你的程序必須要做出相應(yīng)的處理。另一方面,事件則是每天常規(guī)操作的部分并且完全是預(yù)期的。用戶移動(dòng)鼠標(biāo)或按下某個(gè)鍵。瀏覽器導(dǎo)航到一個(gè)新頁面。從控制流的角度看,事件是一次函數(shù)調(diào)用,而異常則是堆棧的突然跳躍,用展開的語義銷毀丟失的對(duì)象。

有關(guān)事件常見的概念誤解是認(rèn)為它們是異步的。雖然事件常常被用于處理用戶輸入和其它異步發(fā)生的行為 ,但事件本身是以同步方式發(fā)生的。觸發(fā)一個(gè)事件與調(diào)用該事件處理器是同一件事情。用偽碼表示就像如下的代碼段:

// raise Foo event
        for (/* each registered object */) {
             obj->FooHandler(/* args */);
        }

控制立即傳到事件處理器,并且不會(huì)返回,除非處理完成。某些系統(tǒng)提供某種以異步觸發(fā)事件的方式,例如,在 Windows 中,你可以用 PostMessage 代替 SendMessage。控制會(huì)從 PostMessage 立即返回,該消息是后來才處理的。但是 .NET 框架中的事件以及我在這里討論的事件是在觸發(fā)時(shí)被立即處理的。當(dāng)然,你總是可以觸發(fā)來自運(yùn)行在單獨(dú)的線程中的消息代碼事件,或者使用異步委托調(diào)用在線程池中執(zhí)行每個(gè)事件處理器,在這種情況下,相對(duì)于主線程來說,事件是異步發(fā)生的。Windows 處理事件的方式完全是通過窗口過程以及一成不變的 WPARAM/LPARAM 參數(shù),按照現(xiàn)代編程標(biāo)準(zhǔn)來說,簡(jiǎn)陋而粗糙。即便是在今天,每個(gè) Windows 程序仍然在使用這種機(jī)制。有些程序員為了傳遞事件,甚至創(chuàng)建不可見窗口。窗口過程并不是真正意義上的事件機(jī)制,因?yàn)樵?Winodows 中每個(gè)窗口只允許有一個(gè)窗口過程,雖然也可以鏈接多個(gè)過程,比如每個(gè)過程都調(diào)用其前面的過程,也就是眾所周知的子類化過程。在真正的事件系統(tǒng)中,相同的事件可以不分等級(jí)地注冊(cè)多個(gè)接收者。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
美女在线视频一区| 影视先锋午夜av| aaa大片免费观看| 成人精品一区二区三区四区| 久久爱www久久做| 国产精品美女视频网站| 亚洲综合五月| 日本桃色视频| 久久免费高清| 国产不卡一二三| 亚洲GV成人无码久久精品| 色婷婷久久一区二区三区麻豆| 国产三级第一页| 久久综合伊人| 91在线观看高清| av天堂永久资源网| 无码中文字幕色专区| 欧美日韩另类国产亚洲欧美一级| 91成人破解版| 亚洲午夜久久久| 精品国产三级a∨在线| 亚洲一区二区三区免费观看| 99精品女人在线观看免费视频| 色综合666| 久久久亚洲国产精品| 国产精品资源站| 久久久精品久久久久| 日本一区二区在线视频| 亚洲乱码日产精品bd| 最近日本中文字幕| 拍拍拍无挡免费播放视频在线观看| 精品人妻无码中文字幕18禁| 国产精品视频免费| 狠狠色噜噜狠狠狠狠8888| 国产激情第一页| 九色porny视频国产网曝| 青青国产在线| 亚洲色图制服丝袜| 在线观看免费亚洲| 91精品尤物| 天使萌一区二区三区免费观看| 国内综合精品午夜久久资源| 免费看成年人视频在线观看| 看片一区二区| 日韩视频123| 久久―日本道色综合久久| 嫩草视频在线免费观看| 天天爱天天干天天操| 国产精品三级在线观看无码| 亚洲精品电影在线一区| 欧美在线视频a| 亚洲人成色77777| 超碰在线免费观看97| 国产精品20p| 亚洲不卡1卡2卡三卡2021麻豆| 亚洲成熟丰满熟妇高潮xxxxx| 114美女做爰视频在线| 伊人天天久久大香线蕉av色| 2222www色视频在线观看| 国产91精品入口17c| 影音先锋人妻啪啪av资源网站| 亚洲av无码一区二区三区观看| 亚洲在线www| 免费中文字幕| 久久99久久亚洲国产| 日韩美女视频一区| 5278欧美一区二区三区| http://嫩草影院| 亚洲欧美国产日韩综合| 国产裸体免费无遮挡| 午夜av电影一区| 欧美理伦片在线播放| 日本vs亚洲vs韩国一区三区| 欧美三级第一页| 网友自拍视频在线| 国产精品一区二区三区四| 久久电影在线| 精品国产第一国产综合精品| 日本新janpanese乱熟| 久久精品国产一区二区电影| 日日噜噜噜噜人人爽亚洲精品| 亚洲第一香蕉视频| 国产视频精品网| 欧洲vodafone精品| 5252色成人免费视频| 国产一级av毛片| 91小视频在线观看| 国产精品视频一区二区三区四区五区| 精品日本高清在线播放| 成全电影播放在线观看国语| 丰满少妇被猛烈进入一区二区| 亚洲在线观看视频| 精品久久久久久久久久久久久久久| 国产亚洲成人精品| 日韩啪啪网站| 久久综合网络一区二区| 欧美剧在线免费观看网站| 午夜一级免费视频| 日韩一区二区a片免费观看| 国产二区视频在线观看| 免费一级淫片aaa片毛片a级| 色婷婷亚洲mv天堂mv在影片| 男女午夜刺激视频| 日韩精品久久一区二区三区| 国产成人在线色| 欧美成aaa人片在线观看蜜臀| 中文字幕欧美人妻精品| 国产在线98福利播放视频| 久久这里只有精品视频首页| 成年在线电影| 国产亚洲欧美一区二区| 毛片毛片毛片| 大白屁股一区二区视频| 四虎国产精品永久在线| 国产成人亚洲综合91| 国产狂喷白浆在线观看视频| 日韩精品免费视频人成| 在线日本制服中文欧美| 国产在线一区二区三区四区| 黄色www视频| 午夜在线免费观看视频| 国产系列第一页| 一区二区三区 日韩| www.五月天色| 亚洲女女做受ⅹxx高潮| 色香蕉在线视频| 国产午夜精品久久| 拍真实国产伦偷精品| 另类图片国产| 日韩精品免费播放| 宅男网站在线免费观看| 57pao成人永久免费视频| 成人综合视频在线| 欧美jizzhd精品欧美满| 国产对白叫床清晰在线播放| 丰满少妇在线观看bd| 亚洲丶国产丶欧美一区二区三区| 国产精品99久久| 丁香五六月婷婷久久激情| 久久久久久91亚洲精品中文字幕| 国产精品视频999| 国产一区二区三区四区五区美女| 九九视频精品全部免费播放| 欧美xingq一区二区| 国产美女精品写真福利视频| 日韩精品一区二区三区视频播放| 日本一区二区成人在线| 日韩高清在线免费观看| 91年精品国产| 国产专区中文字幕| av激情在线| 在线观看国产亚洲| 欧美自拍视频在线| 狠狠综合久久av一区二区小说| 国产婷婷在线观看| 日本理论片2828理论片| 天堂网在线播放| 欧美成人精品一区二区三区| 亚洲激情午夜| 国产精品视频精品视频| 97久久精品在线| 欧美日本乱大交xxxxx| 国产麻豆精品在线观看| 无码国产色欲xxxx视频| 久久久九九九九| 色婷婷亚洲一区二区三区| 欧美日韩免费做爰视频| 欧美国产日产韩国视频| 超碰成人在线免费| 亚洲国产精品91| 色是在线视频| 日本成人中文字幕在线视频| 91日韩视频在线观看| 国产精品欧美三级在线观看| 69久久夜色| 成人性视频免费网站| 天堂在线一区二区| 999久久久精品国产| 麻豆tv入口在线看| 日日夜夜精品视频免费观看| japan乱配videos老少配| 日日夜夜精品视频免费观看| 日本边添边摸边做边爱的第三级| 欧美freesextv| 午夜爽爽爽男女免费观看影院| 亚洲 中文字幕 日韩 无码| 久久久极品av| 午夜精品福利在线视频| 性欧美1819sex性高清大胸| 精品无码人妻少妇久久久久久| 国内自拍视频在线看免费观看| 中文在线观看免费高清| 中文字幕第69页| 国产成人精品综合网站| www.91| 亚洲欧美日韩中文在线制服| 污片在线免费观看| 亚洲人成啪啪网站| 日韩欧美成人午夜| 精品视频vs精品视频| 亚洲电影在线一区二区三区| 在线观看福利片| 日韩在线国产| 日本www视频| 欧美一区二区三区婷婷月色| 国产精品videosex性欧美| 中文字幕在线播放一区二区| 久久综合久久鬼色中文字| 欧美国产激情视频| 日韩精品在线免费播放| 亚洲欧美日韩中文视频| 亚洲第一精品在线| 国产在线精品国自产拍免费| 欧美丰满少妇xxxxx做受| 亚洲国产精品尤物yw在线观看| 911精品产国品一二三产区| 极品美女一区二区三区视频| 50度灰在线观看| 2018高清国产日本一道国产| 欧美日本国产在线| 国产99久久久国产精品| 国产黄片一区二区三区| 四虎永久免费在线| 亚洲美女尤物影院| 欧美www视频在线观看| 久久欧美在线电影| 中文字幕在线不卡视频| 美女av免费观看| 久久久精品一区二区涩爱| 成人不用播放器| 欧美男人的天堂一二区| 人人爱人人爽| 黄页网址大全在线观看| 免费一级a毛片夜夜看| 国产精品传媒在线| 91av福利视频| 国产成人激情视频| 亚洲欧洲精品一区二区三区不卡| 99久久精品国产一区色| 欧美精选视频在线观看| 精油按摩中文字幕久久| 337p亚洲精品色噜噜狠狠| 天堂8中文在线最新版在线| 欧美日韩一区二区三| 一区二区在线观看免费| 日韩激情一二三区| 欲求不满中文字幕| 成年无码av片在线| 日本精品视频在线观看| a国产在线视频| 草色在线视频| 川上优的av在线一区二区| 日本电影在线观看网站| 中文字幕欧美人妻精品一区蜜臀| 青青草97国产精品麻豆| 亚洲一级网站| 日韩精品影音先锋| 国产精品一级视频| 国内精品久久久久久影院老狼| 精品一区二区三区影院在线午夜| 国产精品久久久久久久久搜平片| 国产在线观看91一区二区三区| 亚洲欧美日韩国产成人综合一二三区| 国精一区二区三区| 欧美色图片你懂的| 久久天天躁狠狠躁夜夜爽蜜月| 日韩精品最新在线观看| 婷婷久久综合网| 99精品一级欧美片免费播放| 蜜桃av一区二区三区| 狼人天天伊人久久| 天堂а√在线中文在线新版| 动漫3d精品一区二区三区| 视频一区视频二区视频三区高| 国产三级做爰高清在线| 在线视频观看一区| 日韩在线一卡二卡| 国产日产欧美一区二区视频| 中文字幕高清在线| 中文字幕理伦片免费看| 豆国产97在线|亚洲| 91精品欧美综合在线观看最新| 天天噜噜噜噜噜噜| 日本电影在线观看| 欧美精品综合| 国产精品国产一区二区三区四区| 天堂а√在线中文在线| 久久激情av| 国产香蕉在线观看| 少妇与大狼拘作爱性a| 欧美一级黑人aaaaaaa做受| 国产1卡2卡三卡四卡网站| 一区二区视频网站| 精品无人区乱码1区2区3区在线| 最近中文字幕在线视频| 欧美亚洲三级| 91麻豆视频网站| 色综合色综合色综合色综合色综合| 中文字幕剧情在线观看| 亚洲无人区码一码二码三码的含义| 国产精品极品| 理论不卡电影大全神| 麻豆一区二区麻豆免费观看| 久久精品在这里| 伊人无码高清| 日本一区视频在线观看免费| 成人在线视频福利| 日本中文字幕一区二区视频| 久久亚洲电影天堂| 91久久夜色精品国产网站| 桃乃木かなav在线播放| 欧美日韩国产激情| 五月婷婷在线视频| 亚洲精品久久久久久| 亚欧精品在线视频| 欧美中文一区二区三区| 一区在线播放视频| 国产成人中文字幕| 国产一级黄色录像| 法国伦理少妇愉情| 啊啊啊国产视频| 亚洲人成网站影音先锋播放| 青青青在线视频| 国产亚洲精品91在线| 日本黄色大片在线观看| 三年中国中文在线观看免费播放| 高清国产一区| 欧美黑人xxxⅹ高潮交|