多线程程序被“闹钟”中断

时间:2013-06-10 20:18:04

标签: c++ pthreads signals libcurl

全部,我的多线程程序不断被中断并且“闹钟”正被写入控制台。

经过一些谷歌搜索,许多人提到这与“睡眠”有关,但我的线程都没有呼叫睡眠。目前的流程是

  1. 将函数和参数传递给启动函数
  2. Starter函数启动n个线程并将函数从(1)和适当的参数传递给每个线程
  3. 每个线程都使用给定的参数运行函数,每个函数只依赖于参数和本地内存而独立。
  4. Starter函数连接每个创建的线程pthread_join(cur_thread[i], 0)
  5. 我一直在尝试使用stracegdb来弄清楚投掷信号的是什么。 gdb只是说“没有堆栈”,而strace根本没有停止......我在想我将要过度编写SIGALRM信号处理程序......

    我没有想法,有人可以提出任何建议吗?

    新信息:这似乎与libcurl有关。我用它从网络上获取mjpegs。如果我不使用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;
    }
    

1 个答案:

答案 0 :(得分:2)

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

 setopt(handle, CURLOPT_NOSIGNAL, 1);