的Windows:如何在後臺製作C++程序進程直到計算機關閉?
是否有可能使一個C++程序沒有控制檯或GUI的任何顯示在後臺執行?如何 ?
如何使其進行處理直至電腦關閉?
請問我該如何維護一個正在執行的功能,而這個程序是活動的?
IDE:Visual Studio的2013
的Windows:如何在後臺製作C++程序進程直到計算機關閉?
是否有可能使一個C++程序沒有控制檯或GUI的任何顯示在後臺執行?如何 ?
如何使其進行處理直至電腦關閉?
請問我該如何維護一個正在執行的功能,而這個程序是活動的?
IDE:Visual Studio的2013
第1步:如果你是項目創建期間使用的IDE那麼它很可能會問 '控制檯應用程序' 與'窗口的應用程序」。選擇window-app,這意味着它將在不打開控制檯的情況下啓動。
第2步:現在的代碼中你的IDE可能會已經產生了一些代碼,使窗口可見。刪除代碼:
你的程序運行,但不可見的任務欄上:。
對於運行自己的代碼,你有2種選擇。他們當中哪是合適取決於您的情況,但第二個是通常優選:
既可以使用像WinMain函數生成的方法之一,開始自己的方法,它應該包含一個循環,這個循環中的代碼加上對Sleep()的調用。
使用Windows消息按需運行一些代碼。 (首選)
該計劃將持續到您的計算機處於關閉狀態;那麼它將不再運行。
何時使用選項1比選項2的幾個注意事項:
選項2就是通常被認爲是更好,因爲它的工作原理與的操作系統(Windows),它只當操作系統告訴它發生了某些變化時執行代碼。 另一方面,選項1不依賴於Windows消息 - 有時您需要這種獨立性。它的代價是:你的代碼可能會「手動」檢查是否有變化,有時會做某些事情,但大部分時間選擇睡眠()。這就是所謂的->polling順便說一句。所以寧願選擇2
這是如何修改的WndProc的選項-2的應用程式。例如:每秒發出一聲蜂鳴聲。
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
switch (message)
{
#define IDT_TIMER1 123 // todo find out which numbers are allowed
// which depends on windows AND your organization
case WM_CREATE:
SetTimer(hWnd, IDT_TIMER1, 1000, (TIMERPROC) NULL);
break;
case WM_TIMER:
switch (wParam) {
case IDT_TIMER1:
Beep(100,50);
break;
}
break;
case WM_COMMAND:
...
感謝您的迴應,程序從哪裏開始開始處理呢?沒有主要功能?第二個和第三個問題是什麼? –
@ user3278631在我的編輯中回答了這個問題。 –
你能否詳細說明這兩個選項? –
爲此,您需要隱藏窗口。
對於控制檯:ShowWindow (GetConsoleWindow(), SW_HIDE);
對於Win32項目:使用CreateWindow
或CreateWindowEx
,或ShowWindow(hWnd, SW_HIDE)
或者最佳的解決方案,您可以創建服務要麼不創建窗口,some sample
在linux這種進程叫做'daemon' http://en.wikipedia.org/wiki/Daemon_%28computing%29 – user2485710