在本机c中使用libcurl来编写Windows服务

时间:2011-02-17 15:30:48

标签: c++ windows-services libcurl

任何人都知道怎么做?我试过但curl_global_init

总是有问题

“这个函数不是线程安全的。当程序中的任何其他线程(即共享相同内存的线程)正在运行时,你不能调用它。这不仅仅意味着没有其他线程使用libcurl。 curl_global_init()调用同样线程不安全的其他库的函数,它可能与使用这些其他库的任何其他线程冲突。“

从本教程http://devx.com/cplus/Article/9857#codeitemarea开始,我的服务正常运行,只需添加以下内容:

if (rand() == -1) curl_global_init(CURL_GLOBAL_ALL); 

我收到错误1053:服务没有及时响应启动或控制请求。即使只是调用curl_version()也会导致错误。

感谢。

3 个答案:

答案 0 :(得分:1)

在拆分线程之前,只需发出curl_global_init()

int main()
{
  if ( curl_global_init(CURL_GLOBAL_ALL) ) {
    panic();
  }
  // here goes your program
}

答案 1 :(得分:0)

SERVICE_WIN32_OWN_PROCESS安装您的服务。显然,您自己的服务不应该在您调用curl_global_init时创建任何线程。你不应该在ReportSvcStatus(SERVICE_RUNNING)之前创建线程,所以这应该不是什么大问题。只需在州curl_global_init内拨打SERVICE_START_PENDING

答案 2 :(得分:0)

我认为你的问题不在于线程,就像你做的那样:

if (rand() == -1) curl_global_init(CURL_GLOBAL_ALL);

然后curl_global_init永远不会运行。

但必须链接curl库。我认为这是您的问题 - 您的服务无法找到或加载此库。也许服务无法找到它,因为没有shell它没有正确的PATH。