Symbian中如何轉換非同步操作為同步操作

2021-04-20 14:13:26 字數 999 閱讀 9349

因為symbian中的乙個核心思想是利用單執行緒中的活動物件來實現多執行緒操作,所以我們經常會遇到很多操作是用活動物件完成的。大多數情況下,正如 symbian推薦的一樣,使用活動物件有很多好處,開銷更小,更快。但是,在實際操作中給開發者帶來的難度也不小,不過這也是嵌入式開發的乙個通病。

最不可思議的事情是有很多很明顯的同步事件竟然也要用非同步完成,如影象的編碼解碼,取得imei,這些操作很多情況下都是需要即時處理的,如果用非同步操作有時候感覺很奇怪。

這裡我對現有的非同步操作轉換為同步操作的方法做乙個簡單介紹:

第一種是使用user::waitforrequest(),這也是symbian推薦的一種方法,比較簡單,在很多情況下比較方便。很多書裡面都有介紹。這裡我就不多說了。

第二種是使用

cactiveschedulerwait *iwait;

iwait->start();

await->asyncstop();

那麼如何使用cactiveschedulerwait呢,關鍵是理解他的原理。cactiveschedulerwait與 cactivescheduler是合作使用的,所以你必須已經安裝cactivescheduler並開啟,這在gui程式中並不困難,因為一般架構預設生成,在exe中就需要好好安排。

首先初始化乙個cactiveschedulerwait,然後在你的非同步物件函式後呼叫,例如

iimageencoder->convert( &istatus, *ibitmap );

setactive();

iwait->start();

這樣程式就會卡在這裡等待非同步事件完成。

但是當非同步事件完成後,你必須通知await->asyncstop();

這行函式應該在iimageencoder的runl中呼叫,它會通知iwait停止等待。

這樣就成功了。

在第三版中如果iwait->start();//panics with kern-exec 3

多半是mmp檔案中epocstacksize 的設定不對。

簡述react中如何非同步獲取資料

在專案中我們常常需要通過後端提供的介面來非同步獲取資料,但是應該在哪獲取資料能,如果在reducer中獲取資料,顯然是不合適的,因為reducer是乙個純函式,純函式不適合做這些具有 的操作,如果在元件中去獲取的獲取的話,則很容易使 顯得冗雜,功能不單一。那究竟應該如何做呢?接下來我經用redux ...

如何理解iOS中的同步和非同步

舉個例子 普通b s模式 同步 ajax技術 非同步 同步 提交請求 等待伺服器處理 處理完畢返回 這個期間客戶端瀏覽器不能幹任何事 非同步 請求通過事件觸發 伺服器處理 這是瀏覽器仍然可以作其他事情 處理完畢 同步就是你叫我去吃飯,我聽到了就和你去吃飯 如果沒有聽到,你就不停的叫,直到我告訴你聽到...

UWP中如何利用非同步程式設計跳出死迴圈

uwp中,我設定了兩個按鈕,單擊第乙個按鈕進行乙個迴圈,單擊第二個按鈕停止這個迴圈,但是不管怎麼處理按下第乙個按鈕以後都成了乙個死迴圈,程式呈現卡死狀態。這就讓我想到必須要用非同步程式設計來解決這個問題,網上uwp的教程什麼的實在太少了,在msdn裡面研究了一天到底怎麼寫非同步,終於是讓我給解決了!...