Все, моя многопоточная программа продолжает прерываться, и «Будильник» записывается на консоль.Многопоточная программа прерывается с помощью «Будильник»
После некоторых поисковых запросов многие люди упоминают, что это связано с «сном», но ни один из моих потоков не вызывает сон. Текущий процесс
- Pass функции и параметры функции стартера
- функция стартер начинает
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;
}
Пример кода и выходного значения по сравнению с ожидаемым выходом ??? Вы четко изложили это, но, в частности, с потоками, именно нюансы в реализации вызывают проблемы. – ChrisCM
Я поставил некоторый код реализации, программа довольно надежна в этом текущем состоянии ... Пожалуйста, сообщите мне, если я должен предоставить больше. – Constantin
Обратите внимание, что это происходит только от функций свертки после большого количества вычислений. Функции свертки могут занимать около 7 СЕКУНД чрезвычайно тяжелых вычислений, которые превращаются в 2800 секунд для 'thread_join' – Constantin