Вы должны вызвать функцию gdk_flush
, чтобы фактически отправить команду на сервер.Обратите внимание, что это необходимо только из-за вызова sleep
, который вы не должны использовать в любом случае (приложение перестает отвечать на запросы в течение определенного времени);если бы вы использовали g_timeout_add
, gdk автоматически очистил бы очередь команд X.
Об отображении виджетов: это операция, которая требует двунаправленной связи между программой и сервером, в основном сервер запрашивает у клиентанарисовать окно, и клиент отвечает командами, чтобы нарисовать его.В Gtk это означает, что вы должны позволить запустить основной цикл.Либо:
- установите время ожидания для сна с помощью
gtk_timeout_add
, а остальную часть работы в обратном вызове - запустите вложенный основной цикл с
gtk_main
(возвратите его с помощью gtk_main_quit
, возможно, из обратного вызова тайм-аута - запустите итерации цикла с помощью
gtk_main_iteration
. Это наименее перспективный подход, поскольку он будеттрудно совмещать это со сном.