請教一下,關於 EventQueue 和 Thread 的使用 ....

10 Nov 2017

之前用EventQueue 都是用以下寫法,不需要宣告 Thread。

NoThread

EventQueue queue(32 * EVENTS_EVENT_SIZE);

int main () {
    ...
    ...
    queue.dispatch();
}

現在看到新版的寫法如下,有宣告 Thread。

Thread

EventQueue queue(32 * EVENTS_EVENT_SIZE);
Thread t;

int main () {
    t.start(callback(&queue, &EventQueue::dispatch_forever));
    ...
    ...
}

上下兩個版本是有甚麼差異嗎 ?

10 Nov 2017

自己研究了一下,dispatch_forever() 就等同於 dispatch(default -1),內部是一個while(1) loop 用來處理各個Event。 以 mbed 5.x 來說 main 本身就是一個Thread,所以第一種作法只是在 main thread 直接去處理各個Event。 第二個做法是額外開了一個Thread去專門處理Event,所以會有兩個thread (main thread 和 event thread)。 所以兩個差別應該是第一個版本main 被block住了,不能再做其他事,第二個則可以。

問了一個笨問題,以上有誤請糾正 >_<"