連續運行應用程序的最明智方式是什麼,以便它在觸底之後不會退出?相反,它會從主體的頂部重新開始,並且只有在命令時才退出。 (這是用C語言編寫的)連續運行應用程序
Q
連續運行應用程序
3
A
回答
10
你應該總是有一些乾淨地退出的方式。我建議將代碼移到另一個返回一個標誌來說明是否退出的函數。
int main(int argc, char*argv[])
{
// param parsing, init code
while (DoStuff());
// cleanup code
return 0;
}
int DoStuff(void)
{
// code that you would have had in main
if (we_should_exit)
return 0;
return 1;
}
2
while (true)
{
....
}
爲了詳細闡述一下,你需要在該循環中加入一些東西,讓用戶可以重複操作。無論是讀按鍵還是根據按鍵執行操作,或者從套接字讀取數據併發迴響應。
4
大多數不經歷的應用程序進入某種事件處理循環,允許進行事件驅動的編程。例如,在Win32開發中,你會編寫你的WinMain函數來持續處理新消息,直到它收到WM_QUIT消息,告訴應用程序完成。此代碼通常採用以下形式:
// ...meanwhile, somewhere inside WinMain()
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
如果您正在使用SDL寫一個遊戲,你會循環的SDL事件,直到決定退出,當檢測到用戶已經達到了Esc鍵等。一些代碼,這樣做可能會類似於以下內容:
bool done = false;
while (!done)
{
SDL_Event event;
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
done = true;
break;
case SDL_KEYDOWN:
if (event.key.keysym.sym == SDLK_ESCAPE)
{
done = true;
}
break;
}
}
}
您可能還需要閱讀有關Unix Daemons和Windows Services。
1
有許多方法可以「命令」您的應用程序退出(例如全局退出標誌或返回代碼)。有些已經涉及到使用退出代碼,所以我會提出一個使用退出標誌對現有程序進行的簡單修改。
讓我們假設你的程序執行系統調用輸出目錄列表(完整目錄或單個文件):
int main (int argCount, char *argValue[]) {
char *cmdLine;
if (argCount < 2) {
system ("ls");
} else {
cmdLine = malloc (strlen (argValue[1]) + 4);
sprintf (cmdLine, "ls %s", argValue[1]);
system (cmdLine);
}
}
我們如何去讓這個循環,直到退出條件。採取以下步驟:
- 變化
main()
變爲oldMain()
。 - 添加新的
exitFlag
。 - 添加新的
main()
不斷呼叫oldMain()
直到退出標記。 - 更改
oldMain()
在某個點發出信號退出。
這給了下面的代碼:
static int exitFlag = 0;
int main (int argCount, char *argValue[]) {
int retVal = 0;
while (!exitFlag) {
retVal = oldMain (argCount, argValue);
}
return retVal;
}
static int oldMain (int argCount, char *argValue[]) {
char *cmdLine;
if (argCount < 2) {
system ("ls");
} else {
cmdLine = malloc (strlen (argValue[1]) + 4);
sprintf (cmdLine, "ls %s", argValue[1]);
system (cmdLine);
}
if (someCondition)
exitFlag = 1;
}
相關問題
- 1. 連續運行Web應用程序
- 2. 在asp.net web應用程序中連續運行線程
- 3. 遠程確保某個iOS應用程序連續運行
- 4. 連續執行的應用程序
- 5. 如何讓Android應用程序連續運行
- 6. 如何使MQ應用程序exe連續運行?
- 7. 連續運行插件處理程序
- 8. 連續運行編程
- 9. 在Arduino上運行程序時連續運行循環?
- 10. 爲什麼線程在這個控制檯應用程序中連續運行?
- 11. 在應用程序委託中運行連續線程是否正確
- 12. Facebook應用程序,連續重定向?
- 13. 使用switch語句創建一個連續運行的應用程序
- 14. 如何使用CMD連續執行應用程序?
- 15. 運行連續Web進程的選項
- 16. 在調用System.exit(0)後應用程序繼續運行 - Java
- 17. 如何阻止我的應用程序進行連續處理
- 18. Spark應用程序繼續運行,似乎掛起 - org.apache.spark.sql.hive.thriftserver.HiveThriftServer2
- 19. Android應用程序似乎在退出後繼續運行
- 20. 如何讓應用程序持續運行GPS?
- 21. 在leiningen主要回報後繼續運行應用程序
- 22. 什麼決定了Node.js應用程序是否繼續運行?
- 23. 爲什麼我的應用程序繼續運行?
- 24. 如何在Ruby應用程序運行後持續存儲Configtron
- 25. 繼續運行一個應用程序c#
- 26. 將參數傳遞給持續運行的Python應用程序
- 27. Template10在應用程序暫停後繼續運行服務
- 28. 如何讓應用程序在退出後繼續運行?
- 29. WebView緩存會在應用程序運行之間持續嗎?
- 30. 當iPhone被鎖定時允許應用程序繼續運行