RiCOSEndApplication

此方法會結束執行中的應用程式。該作業在目標作業系統的具體配接器中實作。

簽章
extern void RiCOSEndApplication (int errorCode);
參數
errorCode

指定要傳遞至作業系統的錯誤碼(如果需要的話)

範例
void RiCOSEndApplication(int errorCode)
{
   RiCTask* currentThread, *maint;
   RiCOSTask_endOfProcess = 1;   

   #ifdef _OMINSTRUMENT
      ARCSD_instance();
      ARCSD_closeConnection();
   #endif 
   currentThread = RiCTask_cleanupAllTasks();   

   #ifdef _OMINSTRUMENT
      ARCSD_Destroy();
   #endif    
   RiCTimerManager_cleanup(&RiCSystemTimer);
   maint = RiCMainTask();

   if (maint) {

      RiCOSHandle maintHandle = RiCOSTask_getOSHandle(
         RiCTask_getOSTask(maint));
      char * maintName = taskName(maintHandle);
      int killmainthread = 1;

      if (maintName && *maintName) {
         if (!strcmp(maintName,"tShell")) 
            taskRestart(maintHandle);         
         else            taskDeleteForce(maintHandle);
            killmainthread = 0;
         }

      if (killmainthread) {
         RiCTask_destroy(maint);
      }
   }

   if (currentThread) {
      RiCOSTaskEndCallBack theOSThreadEnderClb;
      void * arg1;

      /* 取得回呼以結束執行緒。 */
      (void)RiCTask_getTaskEndClbk(
         currentThread, &theOSThreadEnderClb,
         &arg1,RiCTRUE);
      RiCOSTask_setEndOSTaskInCleanup(
         RiCTask_getOSTask(currentThread), FALSE);
      /* 不要實際結束作業系統執行緒,因為您
         正在此執行緒上執行,如果您結束的話,
         則會產生資源洩漏。 */
      RiCTask_destroy(currentThread);
      /* 透過虛擬解構子,刪除整個物件。 */
      if (theOSThreadEnderClb != NULL) {
         (*theOSThreadEnderClb)(arg1);   
         /* 現在結束作業系統執行緒。 */
      }
   }
   /* 確保正在結束執行執行緒。*/
   RiCOSTask_endMyTask((void *) taskIdSelf());
}

意見回饋