Windows服务在C ++中以确定的时间间隔运行方法

时间:2011-01-25 07:44:08

标签: c++ boost windows-services timer

我想在用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分钟触发一次。我怎么能这样做?

编辑:如何为此服务创建安装程序?

1 个答案:

答案 0 :(得分:1)

它会打电话给SvcMain一次。但是你没有在SvcMain做你应该做的事情。在MSDN上有一个关于Writing a ServiceMain function的好例子。

如果复制该示例,则编写代码以在SvcInit函数内部调用ConnectToServer(在while(1)循环内)。通过在WaitForSingleObject的调用中指定15分钟作为超时值,您可以在两次通话之间获得15分钟的延迟。


如果ConnectToServer是一个长时间运行的过程,您可能应该找到一种方法来解决它并在其中引入更多对WaitForSingleObject的调用,以便您的服务及时响应停止请求。