此方法會結束執行中的應用程式。該作業在目標作業系統的具體配接器中實作。
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());
}