gpt4 book ai didi

c++ - 保持 ATL 服务运行的最佳方法是什么

转载 作者:行者123 更新时间:2023-11-28 07:38:04 26 4
gpt4 key购买 nike

我已经创建了一个 ATL 服务,在测试时我只是通过留下一个永远运行的 while 循环来保持它的运行(见下面的代码)

HRESULT Run(_In_ int nShowCmd = SW_HIDE)
{
m_running = true;
HANDLE thread = (HANDLE)_beginthreadex(NULL, 0, &MyFunctionToRunInTheService, 0, 0, 0);
while(m_running);
return CAtlServiceModuleT::Run(nShowCmd);
}

我现在已准备好将其作为一项真正的服务实际运行,但我不确定我该怎么做?我仔细查看了下一个,但似乎无法找到 ATL 服务的一个示例。

如果我删除线程代码并直接调用该方法,则该服务始终处于启动状态。如果我删除循环,服务会立即启动和停止。有什么建议吗?

最佳答案

我通过将代码更改为来解决问题

HRESULT Run(_In_ int nShowCmd = SW_HIDE)
{
_beginthreadex(NULL, 0, &CheckForExpiredFiles, 0, 0, 0);
return CAtlServiceModuleT::Run(nShowCmd);
}

我根本不需要 while 循环。在进一步调查中,保持服务事件的代码是标准的。问题是 atlbase.h 中的 PreMessageLoop 方法返回 S_FALSE,这导致服务停止。在我的例子中它返回 S_FALSE 的原因是因为我没有添加任何 COM 对象。因此,在这种情况下,我覆盖了 PreMessageLoop 方法以返回 S_OK。

关于c++ - 保持 ATL 服务运行的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16356545/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com