Symbian作業系統結構之四:線程

來源:互聯網
上載者:User

*線程
 - 線程是多任務的基礎,允許多個代碼序列同時執行
 - 在Symbian作業系統中,可以同時建立多個線程,但是會帶來管理複雜和巨大的系統開銷
 - 在Symbian作業系統中,操作線程的類是RThread,其對象表示一個線程的控制代碼
 - RThread的基類是RHandleBase,它封閉了通用控制代碼的行為,用於表示Symbian作業系統中對象的控制代碼

 

*建立和啟動線程
 TInt Create(const TDesC& aName, THreadFunction aFunction, TInt aStackSize, RHeap* aHeap, TAny* aPtr, TOwnerType aType = EOWnerProcess)
 TInt threadFunc(TAny*)
 {
  for (TInt i=0; i<10; i++)
  {
   User::InfoPrint(_L("Thread"));
   User::After(1000000);
  }
  return 0;
 }
 void StartThreadL()
 {
  RThread thd;
  User::LeaveIfError(thd.Create(_L("MyThread"),threadFunc,KDefalutStactSize,NULL,NULL);
  thd.Resume();//線程建立後是掛起狀態,這一步是啟動線程
 }

 

*開啟已經存在的線程
 RThread thd;
 TInt rc = thd.Open(_L("MyThread"));
 if (rc != KErrNone)
 {
  
 }
 if (thd.EXitType() == EExitPending)//如果進程已經存在並且還在運行
 thd.Suspend();//掛起進程,既等待進程運行完畢
 ……
 thd.Resume(); //繼續線程執行

*線程的優先順序(均是相對所在進程的優先順序而言)
 - EPriorityNull(-30)
 - EPriorityMuchLess(-20)
 - EPriorityLess(-10)
 - EPriorityNormal(0)
 - EPriorityMore(+10)
 - EPriorityMuchMore(+20)
 - EPriorityRealTime(+30)

*終止線程
 - 可以使用RThread::Kill(TInt aReason)來終止線程
 - RThread提供ExitType()和ExitReason()來返回線程終止的原因
 - ExitType()傳回值包括
  ·EExitKill: 線程函數返回或顯示調用Kill()函數
  ·EExutPanic:線程因為嚴重錯誤而結束
  ·EExitPending:線程仍在運行
 - ExitReason()傳回值包括
  ·傳回碼:線程函數正常返回
  ·終結代碼:線程調用Kill()函數
  ·錯誤碼:線程因為嚴重錯誤而退出
  ·零:線程仍在運行

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.