所有,我的多线程程序不断被打断,并且“闹钟”正在写入控制台。
经过一番谷歌搜索后,许多人提到这与“睡眠”有关,但是我的所有线程都没有调用睡眠。目前的流程是
n
线程,并将函数(1)和适当的参数传递给每个线程pthread_join(cur_thread[i], 0)
我一直在尝试使用
strace
和gdb
找出引发信号的内容。 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/