В Free-Pascal я собираюсь создать кроссплатформенную консольную программу, которая будет выполнять большую часть своей работы в связке потоков (TThread).
Основная программа используется только для получения нескольких пользовательских команд время от времени и их выполнения (и для поддержания работы всей программы).
Этот цикл как основной цикл программы отлично работает как в Windows, так и в Linux без использования процессора:
repeat
Write('> ');
ReadLn(s);
// execute command
until s='exit';
Но мне нужны потоки, чтобы заставить основную программу выполнить некоторую работу. Это означает, что мне нужен способ остановить ReadLn из другого потока, чтобы продолжить и проверить флаг команды. Если бы я мог каким-то образом отправить нажатие клавиши Enter, чтобы обмануть ReadLn, чтобы закончить, это было бы хорошо.
Существуют ли другие способы создания кросс-платформенного основного цикла, который прослушивает пользовательскую строку или нажатия клавиш и в то же время будет управляться из других потоков?