Используйте libcurl в native c для написания службы Windows - PullRequest
1 голос
/ 17 февраля 2011

Кто-нибудь знает как?Я пытался, но всегда есть проблема с 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 ]

1 голос
/ 17 февраля 2011

Просто введите curl_global_init(), прежде чем разделиться на темы:

int main()
{
  if ( curl_global_init(CURL_GLOBAL_ALL) ) {
    panic();
  }
  // here goes your program
}
0 голосов
/ 18 февраля 2011

Я думаю, что ваша проблема не с потоками, как если бы вы делали:

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

, тогда curl_global_init никогда не запускается.

Но библиотека curl должна быть связана.И я думаю, что это ваша проблема - ваш сервис не может найти или загрузить эту библиотеку.Возможно, сервис не может найти его, потому что без оболочки у него нет правильного PATH.

0 голосов
/ 17 февраля 2011

Установите свой сервис как SERVICE_WIN32_OWN_PROCESS. Очевидно, что ваш собственный сервис не должен был создавать какие-либо потоки в той точке, где вы вызываете curl_global_init. Вы все равно не должны создавать потоки до ReportSvcStatus(SERVICE_RUNNING), так что это не должно быть большой проблемой. Просто позвоните curl_global_init, находясь в состоянии SERVICE_START_PENDING.

...