日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

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

詳解Visual C++事件編程

2023-06-06 12:10:46
字體:
來源:轉載
供稿:網友

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

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

但是在動手之前,讓我先大體上介紹一下事件和事件編程。它是個重要的主題,當今對事件沒有堅實的理解,你是無法編寫程序的——什么是事件以及什么時候使用事件。

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

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


Figure 1 自頂向下和自底向上

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


Figure 2 混合模型

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

通常在以下幾種場合下我們要使用事件:

通知客戶機實際的事件:用戶按下某個按鍵;午夜時鐘敲響;風扇停止工作造成 CPU 燒毀;

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

調用應用程序提供的算法:C 運行時庫函數 qsort 排序對象數組,但你必須提供比較函數。借助許多 STL 容器也能實現同樣的訣竅.大多數程序員不會調用 qsort 回調某個事件,但你沒有理由不考慮那種方式。它是“時間比較”事件。

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

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

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
不卡av免费在线| 亚洲午夜久久| 亚洲.国产.中文慕字在线| 国产字幕在线看| 中文字幕在线日韩| 欧美日韩在线第一页| www.日韩免费| 99精品999| 欧美日韩精品国产| 亚洲第一视频网站| 欧美日韩在线第一页| 亚洲热线99精品视频| 亚洲欧美中文字幕| 国产一区在线不卡| 日韩在线小视频| 日韩亚洲欧美中文高清在线| 日韩欧美中文字幕在线视频| 久久riav| 日韩亚洲欧美中文高清在线| 国产69精品久久app免费版| 国产高清精品二区| 亚洲一区精品在线| 国产在线视频一区二区| 亚洲一区中文在线| 欧美日韩中文字幕视频| 97caopor国产在线视频| 在线观看国产福利视频| 久久精品99久久久久久久久| 国产无遮挡在线视频免费观看| 日韩欧美在线中文字幕| 91精品国产全国免费观看| 国产视频一区三区| 粉嫩喷白浆久久| 亚洲国产91精品在线观看| 在线免费播放av| 粉嫩喷白浆久久| 一区二区三区精品99久久| 91精品国产综合久久久久久| 中文 欧美 日韩| 久久久精品免费免费| 国产精品福利视频一区二区三区| 国产中文在线| 精品久久香蕉国产线看观看gif | 久久精品国产视频| 91精品久久久久久蜜臀| 国产绿帽一区二区三区| 亚洲 欧美 日韩系列| 日韩亚洲不卡在线| 成人无遮挡免费网站视频在线观看| 欧美久久综合性欧美| 亚洲视频色图| 99久久久精品免费观看国产| 欧洲精品二区| 中文在线日韩| 蜜桃视频中文字幕| 国产95在线|亚洲| 人成在线免费视频| 在线视频你懂得一区| 亚洲欧美中文字幕在线观看| 日韩精品一级| 久久精品国产成人一区二区三区| 日韩精品综合在线| 欧美国产综合视频| 日韩一级视频在线观看| 91精品在线看V| 国产婷婷色一区二区三区| 日韩三级精品电影久久久| 最新中文在线视频| 91一区二区| 久久精品在线免费观看| 久久精品在线观看| 在线观看免费国产小视频| 日韩国产亚洲欧美| 日韩欧美一二三四区| 99精品999| 99精品视频99| 亚洲欧洲一区二区天堂久久| 国产福利三区| 亚洲日本精品视频| 国产99在线 | 亚洲| 91精品国产色综合久久久蜜香臀| 国产在线小视频| 欧美日韩综合在线观看| 精品九九久久| 91精品国产综合久久久久久漫画| av免费在线网站| 999视频精品| 国产一二三视频| 91精品国产综合久久福利| 中文字幕国产欧美| 91精品国产色综合久久久蜜香臀| 综合图区亚洲白拍在线| 日韩一级免费视频| 精品国产免费视频| 日韩高清在线不卡| 中文字幕乱码在线| 欧美不卡一区二区| 欧美日韩国产高清| 精品网站999www| 亚洲黄页一区| 欧美日韩国产在线| 91精品国产调教在线观看| 91国内在线| 视频一区二区不卡| 一区二区在线高清视频| 天堂在线中文| 免费看ww视频网站入口| www.三级.com| 欧美91精品| 一区三区二区视频| 欧美日本精品| www.xxxx精品| 日本不卡视频一区| 精品国产999| 国产99精品| 一区二区三区高清在线| 欧美日韩在线视频免费观看 | 日韩三级视频中文字幕| 国产1区在线| 亚洲乱码中文字幕| 欧美日韩中文字幕在线视频| 欧美日韩精品欧美日韩精品一| 蜜桃视频中文字幕| www.91香蕉视频| www.中文字幕在线| 久久综合久久综合九色| 高清国产一区| 国产www.大片在线| 国产欧美久久久久久久久| 91精品国产色综合久久不卡蜜臀| 一区二区三区四区五区视频在线观看| 欧美亚洲国产日韩| 中文字幕在线视频网| 久久久91精品国产| wwwwww国产| 日韩视频在线一区| 中文字幕 欧美 日韩| 亚洲欧美伊人| 亚洲欧美中文字幕在线一区| 天堂在线视频中文网| 二区三区不卡不卡视频| 欧美中文字幕精品| 欧美一级一级性生活免费录像| 在线视频日韩欧美| 国产乱码午夜在线视频| 999视频精品| 国产在线看一区| 成人久久久久| aaa欧美日韩| 欧美亚洲视频在线看网址| 日韩欧美国产亚洲| 精品极品三级久久久久| 日韩久久久精品| 午夜国产福利在线观看| 韩国v欧美v日本v亚洲| 国产www在线观看| 中文字幕在线观看欧美| 国产亚洲视频中文字幕视频| 91精品免费观看| 欧美三级中文字幕在线观看| 日韩视频中文字幕| 欧美天堂一区二区| 久久久久久欧美| 日韩视频中文| wwwav91com| 欧美日韩在线视频一区| 一区二区三区在线|网站| 亚洲免费精品| 欧美一级日韩一级| 日韩欧美国产亚洲| 中文字幕欧美日韩va免费视频 | 日韩精品在线看| 久久欧美中文字幕| 欧美黄页在线免费观看| 欧洲精品在线视频| 韩国av一区二区| 中文字幕精品视频| 一区免费在线| 中文字幕国产视频| 一区二区视频在线观看免费的| 久久精品免费在线观看| 精品日韩在线| 久久精品国产视频| 日韩不卡在线观看| 欧美日韩中文字幕精品| 中文字幕不卡三区| 中文字幕日韩第一页| 欧美久久一二三四区| 成人久久久久| 91欧美在线视频| 亚洲乱码视频| 一区二区三区精品99久久| 久久久99精品久久| 久久视频在线免费观看| 中文字幕在线观看视频www| 亚洲免费观看视频| 欧美日韩亚洲综合在线| 国产成人日日夜夜| 偷窥国产亚洲免费视频| 中文字幕日韩第一页| 日韩不卡一区二区| 亚洲国产欧美日韩精品| 免费视频一区三区| 日韩欧美国产免费播放| 国产欧美久久久精品免费| 国产三级视频网站| 91精品国产色综合久久久蜜香臀| 亚洲羞羞网站| 亚洲成在线观看| 另类专区欧美| 欧美日韩一二三| 日韩精品视频在线观看免费| 日韩一级中文字幕| 欧美一级免费在线观看| 7799精品视频天天看| 中文字幕日韩免费视频| 国产农村妇女精品一二区| 国产色综合网| 国产精久久久久| 亚洲影视资源网| 国产一级免费| 国产高清一级片| 久久精品女人| 欧美日韩在线观看成人| 成年人看的羞羞网站| 日韩精品视频在线观看视频| 国产激情在线播放| 最近中文字幕在线中文视频| 日韩国产在线不卡视频| 亚洲一级在线| 日韩欧美亚洲视频| 国产精品一区二三区| 91精品国产色综合久久不卡蜜臀| 本道综合精品| 国产欧美综合在线观看第十页| 精品成人久久久| 国产黄在线看| 国产又粗又猛又爽又黄91精品| 国产一区日韩| 日韩欧美一级在线| 91亚洲欧美| 亚洲羞羞网站| 久久久91精品| 中文字幕在线官网| 亚洲欧洲国产视频| 国产伦精品免费视频| 久久综合久久综合九色| 91精品在线国产| 国产三级视频网站| 精品乱人伦一区二区三区| 欧美国产综合在线V| 中文字幕在线精品| 91 中文字幕| 中文字幕一区不卡| 一区二区三区精品在线| www.中文字幕在线观看| 黄色在线资源| 日韩久久精品视频| 日韩欧美国产不卡| 九一久久久久久| 在线看欧美日韩| 99久久www免费| 中文字幕人成乱码在线观看| 日韩精品a在线观看91| 国产在线二区| 日韩av一区在线| 国产日韩精品视频| 亚洲va韩国va欧美va精品| 国产黄色小视频| 欧美三级免费观看| 欧美日韩国产片| 在线一区av| 中文字幕在线观看亚洲| 一区二区三区精品久久久| 精品国产免费观看一区| 日韩一级网站| 黄色欧美日韩| 欧美日韩国产中文精品字幕自在自线| 精品久久久久久综合日本欧美| 国产黄在线观看免费观看不卡| 欧美日韩视频在线| 蜜桃视频一日韩欧美专区| 欧美不卡一区二区| 欧美亚洲国产免费| 91xxx在线观看| 免费国产成人看片在线| 国产成人va亚洲电影| aaa大片在线观看 | 欧美日韩国产在线播放| 国产v日产∨综合v精品视频| 中文字幕欧美日韩在线不卡| 91精品国产91久久| 欧美 日韩 国产 在线观看| 精品一二线国产| 欧美日韩三级视频| 久久久另类综合| 精品欧美久久久| 国产一区成人| 日韩欧美中文| 国产福利在线看| 亚洲第一网中文字幕| 欧美日韩国产综合久久| 日韩欧美在线第一页| 91精品国产综合久久久久久| 午夜国产欧美理论在线播放| 欧美激情一区二区三区在线| 精品国产99久久久久久 | 国产欧美日韩在线视频| 日韩欧美在线中字| 日韩在线观看视频一区二区| 国产福利在线导航| 免费视频久久| 亚洲欧洲日韩在线| 亚洲欧美99| 精品1区2区3区| 视频一区二区国产| 国产一级久久久| 日韩欧美一卡二卡| 日韩 欧美 亚洲| 亚洲免费看av| 欧美一级在线免费| 日韩中文字幕二区| 日韩精品在线第一页| 91av久久久| 中文字幕第一页在线播放| 午夜视频在线观看一区| 一级一片免费视频| 亚洲永久字幕| 国产手机精品视频| 色综合天天综合网国产成人综合天| 欧美亚洲另类制服自拍| 高清1区2区| 亚洲高清不卡一区| 久久精品久久久久| 亚洲а∨精品天堂在线| 三级网站免费观看| 久精品在线观看| 视频一区视频二区中文| 国产久卡久卡久卡久卡视频精品| 精品在线99| 亚洲第一视频| 亚洲欧洲国产视频| 日韩国产成人| 久久69成人| 国产成人综合精品| 日韩午夜黄色| 日韩欧美专区在线| 老司机久久99久久精品播放免费| 九九视频精品免费| 日韩在线a电影| 日韩av不卡在线观看| 午夜国产在线| 成人ww免费完整版在线观看| 国产丝袜一区二区| 国产欧美久久久精品免费| av影视在线看| 久久香蕉一区| 欧美日韩精品欧美日韩精品 | 日本国产一区| 日韩免费电影网站| 中文字幕在线精品| 欧美一级二级三级区| 一区二区三区视频网站| 国产婷婷精品| 日韩在线欧美| 精品成人久久久| 久久综合九色欧美综合狠狠| 国产精品福利视频一区二区三区| 国产日韩精品在线| 亚洲a级在线播放观看| 中文字幕欧美日韩在线不卡| 日韩久久久精品| 在线视频1区2区| 国产最新在线| 欧美三级在线视频| 91精品国产高清久久久久久| 国产免费不卡av| 亚洲综合日韩中文字幕v在线| 日韩精品不卡一区二区| 日韩av二区| 国产亚洲欧美中文| 91麻豆精品在线| av午夜在线| 在线中文免费视频| 国产中文在线视频| 欧美性生交大片免费| 你懂的亚洲视频| 日韩国产欧美在线视频| 日韩中文字幕视频在线观看| 国产欧美日韩视频在线| 欧美日韩乱国产| 99久久婷婷| 欧美日韩精品高清| 亚洲高清视频一区| 大香一本蕉伊线亚洲网| 亚洲福利在线观看| 欧美日韩一区二区在线视频| 91精品国产综合久久久久久漫画| 91麻豆视频网站| 视频一区二区中文字幕|