Symbian作業系統結構之五:進程

來源:互聯網
上載者:User

*進程
 - 一個Symbian作業系統進程就是一個擁有資料區域,棧和堆的可執行程式
 - 一個進程預設擁有8KB的棧空間和1MB的堆空間
 - 在Symbian作業系統中,可以同時啟用多個進程
 - 進程具有私人的地址空間,使用者側的進程無法直接存取其它使用者側進程的記憶體
 - 預設情況下,一個進程包含一個主線程,同時可以建立附加線程
 - 線程間切換比進程間切換需要的開銷要小的很多

*在Symbian作業系統中,使用RProcess來操作進程
*進程樣本
 #include<e32base.h>
 TInt E32Main() //E32Main()主函數是進程的起點
 {
  LIT(KMsgTxt,"Process");
  for (TInt i=0; i<100; i++)
  {
   User::InfoPrint(KMsgTxt);
   User::After(2000000);
  }
  return(0);
 }

*運行進程
 TInt RProcess::Create(const TDesC& aExceutableFile, const TDesC& aCommand, TOwnerType aType=EOwnerProcess)
 EOwnerProcess預設的是所有的進程都可以調用這個進程,如果aType=EOwnerThread則表明只能被當前進程調用
 void LaunchProcessL()
 {
  _LIT(KMyExeFile,"c://system//programs//MyProc.exe");

  RProcess proc;
  User::LeaveIfError(proc.Create(KmyExeFile,KNullDesC));
  proc.Resume();//運行進程
  ……
  proc.Close();
 }

 

*設定和擷取進程參數
 - 通過在Create()中設定第二個參數,可以傳遞命令列參數
 void LaunchProcessWithArgL()
 {
  _LIT(KMyExeFile,"c://system//programs//MyProc.exe");
  _LIT(KMyExeFileCmd,"-x 20 -y 30");

  RProcess proc;

  User::LeaveIfError(proc.Create(KMyExeFile,KMyExeFileCmd));
  proc.Resume();//運行該進程
 }
 - 通過CommandLine()可以獲得命令列參數
 TBuf<200> cmdLine;
 RProcess me;
 me.CommandLine(cmdLine);//把參數返回到cmdLine中

 

*處理序間通訊
 - 可以通過Open()函數開啟其它進程
 - Open()需要的參數為進程的ID或名字
 RProcess myProcess;
 myProcess.Open(Aprocld);
 if (rc != KErrNone)
 {
  處理錯誤
 }
 ……
 myProcess.Close();//完成之後關閉控制代碼

 

 *進程的名字
  - 每個進程都有一個相關聯的ASCII名字
  - 預設的進程名是包含該進程的exe檔案名稱(不包括尾碼名)
  - 進程名可以通過Rename()函數進行修改
  - 通過名字開啟進程的更好的方法是使用Open(TFindProcess& aFind)重載
  RProcess proc;
  _LIT(KMatchName,"MyProc*");
  TFindProcess procName(KMatchName);
  TInt rc = proc.Open(procName);//開啟的是第一個相匹配的進程
  if (rc != KErrNone)
  {
   處理錯誤
  }

*進程的優先順序
 - 核心根據進程優先順序來判斷當多個進程需要同時執行時應該首先執行哪個進程
 - 使用SetPriority()可以設定進程的優先順序 //也可以在mmp檔案中設定
 - 進程的優先順序主要有
  ·EPriorityLow(150)
  ·EPriorityBackground(250)
  ·EPriorityForeground(350)
  ·EPriorityHigh(450)

 

*終止進程
 - 通常情況下,進程運行完成之後(既E32Main()函數運行結束)會自動終止
 - 也可以強制終止進程
  ·Kill(TInt aReason)
   - aReason說明進程終止的原因
   - 進程可以終止自己,或者終止其它進程
  ·Panic(const TDesC& aCategory, TInt aReason)
   - 表示檢測到一些不可恢複的錯誤
   - aCategory是指示錯誤類型的字串
   - aReason給出更加具體的錯誤號碼

聯繫我們

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