所有,我的多线程程序不断被中断,并且正在将“闹钟”写入控制台。
经过一番谷歌搜索,许多人提到这与“睡眠”有关,但我的线程都没有调用睡眠。目前的流程是
- 将函数和参数传递给启动函数
- Starter 函数启动
n
线程并将 (1) 中的函数和适当的参数传递给每个线程 - 每个线程都使用给定的参数运行函数,每个函数都是独立的,仅依赖于参数和本地内存。
- Starter 函数加入每个创建的线程
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;
}