ios 訊息迴圈

2021-08-05 22:58:20 字數 1214 閱讀 4673

什麼是訊息迴圈?

runloop就叫做訊息迴圈,每乙個執行緒內部都有乙個訊息迴圈。

只有主線程的訊息迴圈是預設開啟的,子執行緒的訊息迴圈預設不開啟

訊息迴圈的目的

保證程式不退出

負責處理輸入事件,就是等待使用者互動

如果沒有事件的發生,程式會進入休眠狀態。

訊息迴圈中的輸入事件

輸入事件就是我們在訊息迴圈中去執行不同輸入事件對應的方法

使用訊息迴圈必須要有輸入事件和訊息迴圈的模式

訊息迴圈執行在某一種訊息模式上

輸入事件必須設定訊息迴圈的模式,如果想讓輸入事件在訊息迴圈上執行,輸入事件的訊息迴圈模式必須和當前訊息迴圈的訊息迴圈模式一致。

怎麼啟動子執行緒的訊息迴圈?

[[nsrunloop currentrunloop] run]; 下面來演示下

- (void)viewdidload 

//執行子執行緒上的方法

-(void)test1

//執行在子執行緒的訊息迴圈中的方法

-(void)test2

我們可以用定時器事件來演示下

- (void)viewdidload 

-(void)test

當訊息迴圈監聽事件的產生的時候會阻塞迴圈,事件結束之後,會繼續迴圈。

訊息迴圈的應用

一般來說,乙個執行緒一次只能執行乙個任務,執行完畢之後執行緒就會退出,如果我們需要讓執行緒能夠隨時的去處理事件並且不退出的話,這個時候就要用到runloop了。

一般情況下我們是沒必要去啟動執行緒的runloop,除非需要在乙個單獨的執行緒長久的檢測某個事件。

nsrunloop *mainrunloop = [nsrunloop mainrunloop];獲取主訊息迴圈

如果沒有runloop,可能程式一開啟就退出了。

nsrunloop * loop=[nsrunloop currentrunloop];

[loop run];在乙個子執行緒建立runloop,不是通過alloc init方法建立,而是直接通過呼叫currentrunloop方法來建立,它本身是懶載入的。

runloop物件是利用字典來進行儲存,而且key是對應的執行緒value為該執行緒對應的runloop。

乙個run loop就是乙個事件處理迴圈,用來不停的監聽和處理輸入事件並將其分配到對應的目標上進行處理。

訊息和訊息處理之訊息迴圈

在win32程式設計中,訊息迴圈是相當重要的乙個概念,看似很難,但使用起來卻是非常簡單。在winmain函式的最後,有下列 while getmessage msg,null,0,0 windows應用程式可以接收以各種形式輸入的資訊,這包括鍵盤 滑鼠動作 計時器產生的訊息,也可以是其他應用程式發來...

MFC訊息迴圈

mfc應用程式中處理訊息的順序 1.afxwndproc 該函式負責接收訊息,找到訊息所屬的cwnd物件,然後呼叫afxcallwndproc。2.afxcallwndproc 該函式負責儲存訊息 儲存的內容主要是訊息識別符號和訊息引數 用程式以後使用,然後呼叫windowproc 函式。3.win...

MFC訊息迴圈

mfc應用程式中處理訊息的順序 1.afxwndproc 該函式負責接收訊息,找到訊息所屬的cwnd物件,然後呼叫afxcallwndproc。2.afxcallwndproc 該函式負責儲存訊息 儲存的內容主要是訊息識別符號和訊息引數 用程式以後使用,然後呼叫windowproc 函式。3.win...