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");.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей