繁体   English   中英

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

[英]Multithreaded Program Gets Interrupted with “Alarm Clock”

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

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

  1. 将函数和参数传递给启动函数
  2. Starter函数启动n线程,并将函数(1)和适当的参数传递给每个线程
  3. 每个线程都使用给定的参数运行函数,每个函数都是独立的,仅依赖于参数和本地内存。
  4. 入门函数将连接每个创建的线程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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM