служба Windows для запуска метода в определенный промежуток времени в C ++ - PullRequest
1 голос
/ 25 января 2011

Я хочу периодически вызывать метод в службе Windows, встроенной в C ++. Я вызываю метод в SvcMain ().

int main(int argc, char* argv[])
{  
    // The Services to run have to be added in this table.
    // It takes the Service Name and the name of the method to be called by SC Manager.
    // Add any additional services for the process to this table.
    SERVICE_TABLE_ENTRY ServiceTable[]= {{SVCNAME,(LPSERVICE_MAIN_FUNCTION)SvcMain},{NULL,NULL}};

    // This call returns when the service has stopped. 
    // The process should simply terminate when the call returns.
    StartServiceCtrlDispatcher(ServiceTable);  
    return 0;
}

void WINAPI SvcMain(DWORD argc, LPTSTR *argv)
{
    ConnectToServer();
}

Q1. Это будет запускать ConnectToServer () постоянно или только один раз? Я просто не знаю, как работает сервис win.
Q2. Я хочу, чтобы ConnectToServer () запускался каждые 15 минут. Как я могу это сделать?

РЕДАКТИРОВАТЬ: Как я могу создать установщик для этой службы?

1 Ответ

1 голос
/ 25 января 2011

Он будет вызывать SvcMain один раз.Но вы не делаете то, что вы должны в SvcMain.На MSDN есть хороший пример о написании функции ServiceMain .

Если вы скопируете этот пример, вы напишите свой код для вызова ConnectToServer внутри функции SvcInit (внутри цикла while(1))).Вы можете получить 15-минутную задержку между вызовами, указав 15 минут в качестве значения тайм-аута в вызове для WaitForSingleObject.


Если ConnectToServer - это длительный процесс, вы, вероятно, должны найти способ прерватьэто и вводит больше звонков на WaitForSingleObject внутри него, чтобы ваша служба своевременно реагировала на запросы Stop.

...