У меня есть простая клиент-серверная программа, написанная на Qt, где процессы взаимодействуют с использованием MPI. Основной дизайн, который я пытаюсь реализовать, следующий:
Первый процесс («сервер») запускает графический интерфейс пользователя (производный от QMainWindow
), который прослушивает сообщения от клиентов (с использованием повторного запуска QTimer
s и асинхронных вызовов MPI), обновляет Графический интерфейс в зависимости от того, какие сообщения он получает, и отправляет ответ на каждое сообщение.
Каждый другой процесс («клиенты») выполняется в бесконечном цикле, и все, что они должны сделать, - это отправить сообщение процессу сервера, получить ответ, ненадолго перейти в спящий режим и затем разбудить и повтори. Каждый процесс создает отдельный объект, полученный из QThread
, и вызывает его метод start()
. Метод run()
этих классов выглядит следующим образом:
из foo.cpp:
void Foo::run()
{
while (true)
{
// Send message to the first process
// Wait for a reply
// Do uninteresting stuff with the reply
sleep(3); // also tried QThread::sleep(3)
}
}
В коде клиента нигде нет вызова exec()
, поэтому цикл событий не должен начинаться.
Проблема в том, что клиенты никогда не выходят из спящего режима (если я окружаю вызов sleep()
двумя записями в файл журнала, выполняется только первая, управление никогда не достигает второй). Это потому, что я не запустил цикл событий? И если да, то как проще всего добиться желаемой функциональности?