色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Glib創建自定義事件源的方法

如意 ? 來源:CSDN ? 作者:CaspianSea ? 2020-06-22 11:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

GLib 實現了一個功能強大的事件循環分發處理機制,被抽象成為 GMainLoop,用于循環處理事件源上的事件。每個 GMainLoop 都工作在指定的 GMainContext 上。事件源在 GLib 中則被抽象成了 GSource。在 GMainContext 中有一個 GSource 列表。GLib 內部定義實現了三種類型的事件源,分別是 Idle, Timeout 和 I/O。同時也支持創建自定義的事件源。

自定義事件源的基本作用

自定義的事件源可以用來將外部信號(事件)掛到程序中的指定主循環上,從而在 g_main_loop_run 中可以響應這些事件。

如何創建自定義事件源

GLib 提供了一系列的接口用于創建自定義的事件源,下面我們先講解一下創建事件源的基本函數和數據結構,最后給出一些實例。

自定義的事件源是一個繼承 GSource 的結構體,即自定義事件源的結構體 的第一個成員是 GSource 結構體, 其后便可放置程序所需數據,

實現了事件源數據結構的定義之后,還需要實現事件源所規定的接口,主要為 prepare, check, dispatch, finalize 等事件處理函數(回調函數),它們包含于 GSourceFuncs 結構體中。將 GSourceFuncs 結構以及事件源結構的存儲空間寬度作為參數傳給 g_source_new 便可構造一個新的事件源,繼而可使用 g_source_attach 函數將新的事件源添加到主循環上下文中。

Timeout 類事件源,GLib 也提供了預定義的定時器事件源,其用法與 GLib 預定義的空閑事件源類似。例如:

如果要自定義定時器類型的事件源,只需讓事件源的 prepare 與 check 接口在時間超過所設定的時間間隔時返回 TRUE, 否則返回 FALSE。

I/O 類型的事件源要稍微難理解一些,因為涉及到了操作系統層面的 poll 機制。所謂 poll 機制,就是操作系統提供的對文件描述符所關聯的 I/O 的狀態監視功能 ,例如向文件中寫入數據 ,那么 I/O 的狀態可以表示為 POLLOUT, 而從文件中讀取數據,那么 I/O 的狀態就變為 POLLIN。GLib 為 Unix 系統與Windows 系統的 poll 機制進行了封裝,并且可以將文件與主事件循環的事件源建立關聯,在主循環的過程中, g_main_loop_run 會輪詢各個關聯到文件的事件源,并處理相應的事件響應。I/O 類型的事件源, prepare,其 check, dispatch 等接口的執行次序如下:

a. 主事件循環會首先調用 check 接口, 詢問事件源是否準備好。因為此時, g_main_loop_run 尚未輪詢那些與 I/O 相關聯的事件源, 所以 I/O 類型的事件源, check 接口的返回值應該是 FALSE。其主事件循環調用 g_main_context_iteration 輪詢各事件源,探尋是否有 I/O 類型事件源的狀態發生變化,并記錄變化結果。

b. 主循環調用 check 接口, 詢問事件是否準備好。此時, 如果 I/O 類型事件源的狀態變化符合要求,那么就返回 TRUEE,否則返回 FALSE。

c. 如果 prepare 與 check接口的返回值均為 TRUE, 那么此時主事件循環會調用 dispatch 接口分發消息。

像 Idle 類型與 Timeout 類型事件源那樣,GLib 也提供了預定義的 I/O 類型事件源,

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Glibc
    +關注

    關注

    0

    文章

    9

    瀏覽量

    7655
收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何添加自定義單板

    在開發過程中,用戶有時需要創建自定義板配置。本節將通過一個實例講解用戶如何創建屬于自己的machine,下面以g2l-test.conf為例進行說明。
    的頭像 發表于 03-12 14:43 ?588次閱讀

    matlab自定義函數調用的方法

    matlab自定義函數調用的方法 命令文件/函數文件+ 函數文件 - 多
    發表于 11-29 13:14 ?88次下載

    在Protel中自定義Title Block的方法

    詳細介紹了在Protel中自定義Title Block的方法
    發表于 05-24 11:42 ?0次下載
    在Protel中<b class='flag-5'>自定義</b>Title Block的<b class='flag-5'>方法</b>

    1602自定義字符

    1602液晶能夠顯示自定義字符,能夠根據讀者的具體情況顯示自定義字符。
    發表于 01-20 15:43 ?1次下載

    在NI Multisim中創建自定義元器件

    在NI Multisim中創建自定義元器件,NI Multisim雖然強大但芯片太少所以總結這方法
    發表于 07-20 17:21 ?0次下載

    Qt自定義窗口部件的創建

    通過對一個已經存在的Qt窗口部件進行子類化或者直接對QWidget進行子類化,就可以創建自定義窗口部件。以下直接對已有的Qt窗口部件進行子類化
    發表于 09-09 09:00 ?2578次閱讀

    利用SDSoC創建自定義硬件

    SDSoC是開發Zynq-7000 SoC應用程序的理想工具,當您可以在自己的定制板平臺上實現設計時,SDSoC變得更加強大。 有了這個視頻,看看創建自己的自定義硬件是多么容易..
    的頭像 發表于 11-26 06:25 ?2799次閱讀

    如何制作自定義PCB形狀

    雖然現在的步驟很簡單,但是所有的事情都花了一些時間。..所以我嘗試匯編這里的所有技巧,以使那些尋求幫助的人變得非常簡單創建自定義格式的簡便方法
    的頭像 發表于 10-14 10:14 ?6396次閱讀
    如何制作<b class='flag-5'>自定義</b>PCB形狀

    自定義視圖組件教程案例

    自定義組件 1.自定義組件-particles(粒子效果) 2.自定義組件- pulse(脈沖button效果) 3.自定義組件-progress(progress效果) 4.
    發表于 04-08 10:48 ?15次下載

    ArkUI如何自定義彈窗(eTS)

    自定義彈窗其實也是比較簡單的,通過CustomDialogController類就可以顯示自定義彈窗。
    的頭像 發表于 08-31 08:24 ?2682次閱讀

    教程 2:添加特征-自定義配置文件創建

    教程 2:添加特征 - 自定義配置文件創建
    發表于 03-15 19:39 ?0次下載
    教程 2:添加特征-<b class='flag-5'>自定義</b>配置文件<b class='flag-5'>創建</b>

    教程 2:添加特征-自定義配置文件創建

    教程 2:添加特征 - 自定義配置文件創建
    發表于 07-06 18:50 ?0次下載
    教程 2:添加特征-<b class='flag-5'>自定義</b>配置文件<b class='flag-5'>創建</b>

    labview超快自定義控件制作和普通自定義控件制作

    labview超快自定義控件制作和普通自定義控件制作
    發表于 08-21 10:32 ?14次下載

    創建自定義的基于閃存的引導加載程序(BSL)

    電子發燒友網站提供《創建自定義的基于閃存的引導加載程序(BSL).pdf》資料免費下載
    發表于 09-19 10:50 ?0次下載
    <b class='flag-5'>創建</b><b class='flag-5'>自定義</b>的基于閃存的引導加載程序(BSL)

    如何快速創建用戶自定義Board和App工程

    概述自HPM_SDKv1.7.0發布開始,在HPM_ENV中新增了user_template文件夾,以方便用戶快速創建自定義的Board和App工程。user_template是用戶模板工程,用戶
    的頭像 發表于 02-08 13:38 ?522次閱讀
    如何快速<b class='flag-5'>創建</b>用戶<b class='flag-5'>自定義</b>Board和App工程
    主站蜘蛛池模板: 国产色婷亚洲99精品AV在线 | 国产精品久久久久久精品... | 国产精品人妻午夜福利 | 视频在线免费观看 | 精品久久99麻豆蜜桃666 | 噜妇插内射精品 | 中文人妻熟妇精品乱又伦 | 果冻传媒视频在线播放 免费观看 | 色多多污网站在线观看 | 广西美女色炮150p图 | 国产精品久久久久久久久99热 | free性欧美xxx狂欢 | 亚洲伊人精品综合在合线 | 啦啦啦 中文 日本 韩国 免费 | xx顶级欧美熟妞xxhd | 欧美丰满少妇久久无码精品 | 男女午夜性爽快免费视频不卡 | 99视频在线免费 | 中文日产无乱码AV在线观 | 亚洲精品久久久992KVTV | 精品欧美一区二区三区久久久 | 善良的女房东味道2在线观看 | 日本二区三区欧美亚洲国 | 大相蕉伊人狼人久草av | 一二三四在线观看高清电视剧 | 粉嫩无套白浆第一次jk | 午夜国产精品免费观看 | 97国产人妻精品无码AV在线 | 亚洲色图19p| 超碰免费视频公开97 | 97伦理电影在线不卡 | 日日摸夜夜添无码AVA片 | 在教室伦流澡到高潮H免费视频 | 中文字幕无码亚洲字幕成A人蜜桃 | 免费国产久久拍久久爱 | 国产精品久久国产三级国不卡顿 | 最新国产在线视频在线 | 丰满女友bd高清在线观看 | 国产成人免费片在线观看 | 国产 在线 亚洲 欧美 动漫 | 国产亚洲精品久久久久 |

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品