所有,我的多线程程序不断被打断,并且“闹钟”正在写入控制台。

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

  • 将函数和参数传递给启动函数
  • Starter函数启动n线程,并将函数(1)和适当的参数传递给每个线程
  • 每个线程都使用给定的参数运行函数,每个函数都是独立的,仅依赖于参数和本地内存。
  • Starter函数将每个创建的线程加入pthread_join(cur_thread[i], 0)

  • 我一直在尝试使用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;
    }
    

    最佳答案

    这与libcurl有关。我不得不用

     setopt(handle, CURLOPT_NOSIGNAL, 1);
    

    关于c++ - 多线程程序被 “Alarm Clock”中断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17032094/

    10-12 00:43
    查看更多