non-blocking ?
смотрю на .join, а ведь он blocking. Я хотел бы запустить thread и дать ему например интервал времени на протяжение которого он должен выполнится, так чтобы join только его закрыл за милисекунду когда он до него дойдет.
Юз-кейс:
посылаю код который сохарняет файл за 14 секунд в отдельный thread, сразу после этого делаю слип на 60 секунд (в это время разные треды делают разную работу) и когда просыпаюсь, хотел бы удостовериться что код на сохранение уже был выполнен в течение этих 60 секунд.
пришла возможно бредовая идея, а может нет, запустить на самом деле еще один тред, который бы только делал .join на пишушщий тред, но тогда проблема рекурсивная, а кто будет ждать этот тред, поэтому так тоже не пойдет.
Нипонятна…..
Почитать про синхронизацию потоков. При чём тут non-blocking я так и не понял, но указанная задача решается уж точно не слипом на 60 секунд.
слип это не решение, а часть условий.
Слипо-ориентированное программирование ?
Решается это блокированием потока, который должен ждать до момента, когда задача завершена. Это тоже не идеальный подход к многопоточному программированию, но уж точно лучше варианта "поспать 60 секунд, а вдруг там всё успеется".
Если один поток боокируется пока не завершится второй - точно нужен первый то ?)
Ну он писал, что он там не один. на 60 секунд (в это время разные треды делают разную работу)
Это как раз идеальный вариант, но, мне кажется, до него там пока далеко.
std::promise. И ждать фьючу. Или не ждать и юзать then/корутины, но это уже в бусте либо С++20 или тот же буст
Может лучше condition variable ?
Да хотя дя.. ему просто ждать… может на чем угодно хоть на атомике
Мне всегда казалось, что торчащий наружу cv брать и на нем ждать это очень пахнущий код. cv ещё могут и просыпаться просто так
Любой thread не блокирующий.
Обсуждают сегодня