gpt4 book ai didi

c++ - 多线程程序被中断 "Alarm Clock"

转载 作者:行者123 更新时间:2023-11-30 04:17:33 26 4
gpt4 key购买 nike

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

谷歌搜索后,很多人提到这与“ sleep ”有关,但我的线程中没有一个调用 sleep 。目前的流程是

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

我一直在尝试使用 stracegdb 来找出发出信号的原因。 gdb 只是说“没有堆栈”并且 strace 根本没有停止......我在想我要重写 SIGALRM 信号处理程序......

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

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com