thread::join()
отработал 10 часов и продолжает работать. Но когда использую detach()
, проходит от 50 минут до 1 час 10 минут, и поток останавливает работу.
std::thread thr1(waitSignal);
thr1.detach();
Что делаю не так?
UPD
void waitSignal(){
while(1){
std::ofstream log("/tmp/debug.txt", std::ios_base::app | std::ios_base::out);
log << time << " - thread\n";
sleep(10);
}
}
int iniReceive(){
// some code to start receive
std::thread thr1(waitSignal);
thr1.detach();
return(1);
}
int main()
{
iniReceive();
while(1){
printf("main");
std::ofstream log("/tmp/debug.txt", std::ios_base::app | std::ios_base::out);
log << time << " - MAIN\n";
sleep(60);
}
return(0);
}
Мне жутко не нравятся две вещи - что
1. используется один и тот же файл, при этом
2. он простаивает в открытом состоянии все время. Вы бы хотя бы закрывали его перед вызовом sleep
, что ли... а еще лучше - "обсемафорили" мьютексом...
И потом, при join()
ваш основной поток к файлу не лезет, ждет завершения... а при detach()
они работают параллельно - начинаются коллизии. То, что вы наблюдаете, может быть простым голоданием - потому что основной поток тоже держит файл постоянно открытым, закрывая лишь на время вывода printf("main");
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какой тип имеют параметры SO_SNDTIMEO и SO_RCVTIMEO, которые задаются в setsockopt для Windows?
Всем приветПодскажите, пожалуйста, нормальный скрипт, который будет переводить дату в нормальный вид на js
Нужно ли оборачивать функцию каждый раз при создании скрипта?, например есть скрипт меню, есть скрипт прокрутки анимации, и тд
Это кусок кода игры "крестики-нолики", который нужно сделать более компактным! Хотя оно и так работает)