使用中的物件架構之一:非同步函數

來源:互聯網
上載者:User

  參數包含TRequestStatus&的,必然是非同步函數,比如RTimer::After()

    void After(TRequestStatus& aStatus, TTimeIntervalMicroSeconds32 aInterval);

   

    TRequestStatus包含一個TInt狀態值,代表非同步函數的狀態,即

    -處理狀態

    -完成狀態

 

    許多Symbian內建的系統函數都有同步函數和非同步函數兩個版本

    *比較下面兩個函數

          TInt MyFunc1(TAny* someArg);

          TInt MyFunc2(TAny* someArg, TRequestStatus& aStatus);

    *當MyFunc1()被調用時,該函數完成之後送立刻返回運行結果

     當調用MyFunc2()時,該函數立刻返回,並且將aStatus設為KRequestPending,表示該函數正在執行,當程式運行完成之後,aStatus發生變化,用來指示啟動並執行結果(如果運行成功則為KErrNone).

   

    調用非同步函數樣本
 *可以同步等待,直到請求完成,比如
     RTimer timer; //通過RTimer獲得一個時間伺服器的控制代碼
     timer.CreateLocal(); //獲得本地時間
     TRequestStatus status; //產生一個請求狀態變數status
     timer.After(status,1000000);
     User::WatiForRequest(status);
*但是,這樣會造成線程掛起1秒鐘
*更好的解決方案是使用使用中的物件,當計時器完成之後通知活動對象

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.