多线程程序因"Alarm Clock"而中断



总之,我的多线程程序一直被中断,并且"Alarm clock"正在写入控制台。

在谷歌上搜索之后,很多人提到这与"睡眠"有关,但我的线程都没有调用睡眠。当前进程为

  1. 传递一个函数和参数给启动函数
  2. Starter函数启动n线程,并从(1)中传递函数和适当的参数给每个线程
  3. 每个线程使用给定的参数运行函数,每个函数仅依赖于参数和本地内存,是独立的。
  4. 启动函数连接每个创建的线程pthread_join(cur_thread[i], 0)

我一直在尝试使用stracegdb来弄清楚是什么抛出了信号。gdb只是说"没有堆栈",strace根本没有停止…我想我要重写SIGALRM信号处理程序…

我想不出主意了,谁能提点建议吗?

新信息:这似乎与libcurl有关。我用它从网络上获取jpeg文件。如果不使用libcurl,则SIGALRM不会触发。我的libcurl代码如下:

static void * capture_function(void * cam)
{
    MyData * camera = (MyData *)cam;
    //Create the curl
    camera->m_curl = curl_easy_init();
    //Connect to the camera
    curl_easy_setopt(camera->m_curl, CURLOPT_URL, camera->m_ip);
    //Set up our callback functions
    curl_easy_setopt(camera->m_curl, CURLOPT_WRITEFUNCTION, CurlWriteCallback);
    curl_easy_setopt(camera->m_curl, CURLOPT_WRITEDATA, (void *)camera);
    curl_easy_perform(camera->m_curl);
    camera->m_state = camera->m_state & ~CAPTURING; //Remove the capturing flag;
    curl_easy_cleanup(camera->m_curl);
    return NULL;
}

这与libcurl有关。我不得不使用

 setopt(handle, CURLOPT_NOSIGNAL, 1);

最新更新