我想在用C ++构建的Windows服务中定期调用方法。我在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()或只触发一次吗?我只是不知道胜利服务是如何运作的 Q2.I希望ConnectToServer()每15分钟触发一次。我怎么能这样做?
编辑:如何为此服务创建安装程序?
答案 0 :(得分:1)
它会打电话给SvcMain一次。但是你没有在SvcMain做你应该做的事情。在MSDN上有一个关于Writing a ServiceMain function的好例子。
如果复制该示例,则编写代码以在SvcInit函数内部调用ConnectToServer(在while(1)
循环内)。通过在WaitForSingleObject
的调用中指定15分钟作为超时值,您可以在两次通话之间获得15分钟的延迟。
如果ConnectToServer是一个长时间运行的过程,您可能应该找到一种方法来解决它并在其中引入更多对WaitForSingleObject
的调用,以便您的服务及时响应停止请求。