1. 初始化時,gdk向mainloop註冊乙個事件源(gdkevents-x11.c:gdk_events_init),讓mainloop掛到x window的socket上。
2. gtk呼叫gdk的gdk_event_handler_set函式設定事件處理函式(gtkmain.c: do_pre_parse_initialization)gtk_main_do_event。
3. 當有x window事件過來時,mainloop呼叫事件源的事件分發函式gdk_event_dispatch。
4. gdk_event_dispatch中呼叫gdk_event_translate把xevent轉換成gdkevent,並放到gdk的訊息佇列中。
5. gdk_event_dispatch中從gdk的訊息佇列中取出事件,並呼叫gtk設定的事件處理函式gtk_main_do_event。
6. gtk_main_do_event中呼叫gtk_get_event_widget得到事件的widget,然後呼叫相應widget函式。
7. widget函式裡呼叫各控制項過載的函式或者所註冊的事件處理函式。
8. 這樣,事件就到達了你所connect的**函式裡。
工作流任務的訊息處理
最近自己在開發工作流系統,簡單寫一下工作流任務的訊息處理的業務流程,記錄一下。在工作流引擎產生乙個任務需要某個人進行人工處理的時候,工作流先插入一條任務到 wf t task 表中,這條任務記錄應該包括 任務id,任務的狀態 未處理 處理任務的角色 如部門經理 處理任務的人 如張三,屬於 部門經理 ...
C 之訊息佇列的簡要說明
using system using system.drawing using system.collections using system.componentmodel using system.windows.forms using system.data using system.messa...
關於訊息佇列的一點說明
訊息佇列與管道以及有名管道相比,具有更大的靈活性,首先,它提供有格式位元組流,有利於減少開發人員的工作量 其次,訊息具有型別,在實際應用中,可作為優先順序使用。這兩點是管道以及有名管道所不能比的。同樣,訊息佇列可以在幾個程序間復用,而不管這幾個程序是否具有親緣關係,這一點與有名管道很相似 但訊息佇列...