連續運行應用程序的最明智方式是什麼,以便它在觸底之後不會退出?相反,它會從主體的頂部重新開始,並且只有在命令時才退出。 (這是用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. 連續運行一個應用程序
- 3. 應用程序線程繼續運行
- 4. 在asp.net web應用程序中連續運行線程
- 5. 遠程確保某個iOS應用程序連續運行
- 6. WinCE應用程序連續運行!無法關閉應用程序
- 7. 連續執行的應用程序
- 8. 在後臺連續快速運行應用程序
- 9. 如何讓Android應用程序連續運行
- 10. 在免費的Heroku上運行連續的PHP應用程序
- 11. 如何使MQ應用程序exe連續運行?
- 12. 想讓連續運行的應用程序,怎麼樣?
- 13. 如何連續運行應用程序而不掛在後臺
- 14. 連續運行插件處理程序
- 15. 在Unix中連續運行程序
- 16. 連續運行編程
- 17. 如何在運行Android應用程序時連續檢查互聯網連接
- 18. 在Arduino上運行程序時連續運行循環?
- 19. 帶有持續運行的Java程序的Web應用程序
- 20. 在應用程序委託中運行連續線程是否正確
- 21. 爲什麼線程在這個控制檯應用程序中連續運行?
- 22. System.Diagnostics.Process程序繼續運行
- 23. 連續運行servlet
- 24. 連續運行BackgroundWorker
- 25. grails應用程序的連續部署
- 26. Facebook應用程序,連續重定向?
- 27. 使用switch語句創建一個連續運行的應用程序
- 28. Android:在後臺連續運行應用程序,即使用戶關閉應用程序
- 29. 停止調試,但繼續運行應用程序(VS2008 asp.net web應用程序)
- 30. 如何使用CMD連續執行應用程序?