Фоновый поток (thread detach) перестает работать спустя час

294
19 июля 2017, 23:51

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);
}
Answer 1

Мне жутко не нравятся две вещи - что
1. используется один и тот же файл, при этом
2. он простаивает в открытом состоянии все время. Вы бы хотя бы закрывали его перед вызовом sleep, что ли... а еще лучше - "обсемафорили" мьютексом...

И потом, при join() ваш основной поток к файлу не лезет, ждет завершения... а при detach() они работают параллельно - начинаются коллизии. То, что вы наблюдаете, может быть простым голоданием - потому что основной поток тоже держит файл постоянно открытым, закрывая лишь на время вывода printf("main");.

READ ALSO
Какой тип имеют параметры SO_SNDTIMEO и SO_RCVTIMEO для Windows?

Какой тип имеют параметры SO_SNDTIMEO и SO_RCVTIMEO для Windows?

Какой тип имеют параметры SO_SNDTIMEO и SO_RCVTIMEO, которые задаются в setsockopt для Windows?

218
Перевод времени из input type=date в нормальный вид (javascript)

Перевод времени из input type=date в нормальный вид (javascript)

Всем приветПодскажите, пожалуйста, нормальный скрипт, который будет переводить дату в нормальный вид на js

231
Нужно ли создавать $(function(){ }); постоянно?

Нужно ли создавать $(function(){ }); постоянно?

Нужно ли оборачивать функцию каждый раз при создании скрипта?, например есть скрипт меню, есть скрипт прокрутки анимации, и тд

223
Минимизация блоков if-else

Минимизация блоков if-else

Это кусок кода игры "крестики-нолики", который нужно сделать более компактным! Хотя оно и так работает)

299