LINUX.ORG.RU

Как правильно?

 ,


0

1

Я опять пытаюсь что-то делать на плюсах. Так, ущербные хеллоуворлды. И сейчас пытаюсь понять одну вещь.

Допустим, есть несколько функций, которые должны выполняться (в бесконечном цикле) одновременно параллельно, не дожидаясь завершения выполнения других функций. Некоторые из них содержат Sleep. Начал гуглить про std::async, а в MinGW (хочу в кроссплатформу, поэтому gcc (или g++, чо там вообще)) это не реализовано.

В общем, такой вопрос: как сделать подобное правильно, чтобы ещё и кроссплатформенно?

UPD: std::async заработал, но функции всё ещё перестают выполняться, пока выполняется функция со Sleep.

UPD2: Sleep нужен для создания задержек. Т.е. в функции произошло одно действие, затем Sleep(1000), затем другое действие.

UPD3: с std::this_thread::sleep_for(std::chrono::seconds(1)); то же самое.

UPD4: с std::thread и thread.detach() функции выполняются какое-то время, а потом перестают выполняться вообще.

Deleted

Последнее исправление: Deleted (всего исправлений: 7)

Ответ на: комментарий от pon4ik

Тут сложно не согласиться, но они либо не осуществляют ввод/вывод

Не осуществляют ввод. Вывод вполне можно делать неблокирующим, если не проверять его успешность.

monk ★★★★★
()
Ответ на: комментарий от monk

Если говорить строго, то да. Но практическая ценность таких решений кажется малопонятной, хотя может я просто не могу придумать годный юзекейс.

Вот кстати интересно, что будет в случае конкретно онтопика если забить выходной буфер неблокирующим сокетом и завершить процесс. Пакеты из буфера уйдут в сеть?

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Но практическая ценность таких решений кажется малопонятной, хотя может я просто не могу придумать годный юзекейс.

/bin/yes; /bin/true; .... большая часть UNIX'овых утилит вполне нормально работают без проверки успешности вывода сообщений (или совсем без вывода).

Вот кстати интересно, что будет в случае конкретно онтопика если забить выходной буфер неблокирующим сокетом и завершить процесс. Пакеты из буфера уйдут в сеть?

Скорее всего, нет. При printf("..."); 1/0; сообщение на экран не выводится.

monk ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.