Остановка окна GTK при использовании Windows Sleep () - PullRequest
1 голос
/ 01 декабря 2011

Я сделал небольшое приложение, которое иллюстрирует быструю сортировку, и у меня есть второе окно, в котором отображается текущий массив, отсортированный по уровням.Меня попросили поставить какую-то задержку, и поэтому я решил использовать Sleep () из windows.h.Однако по какой-то причине окно останавливается и начинает работать только после всего этого.Ничто не отображается на уровне, как я собираюсь.Это работает, когда без Sleep ().

Это просто базовая быстрая сортировка, где я помещаю Sleep () сразу после механизма печати, который оба вставлен где-то в скобку базового случая.Я вызываю какой-то механизм паузы, не приводя к грубому циклу?

Ответы [ 2 ]

4 голосов
/ 01 декабря 2011

GTK + не является многопоточным. Если вы остановите свой процесс с помощью Sleep(), то, конечно, пользовательский интерфейс не будет обновляться, поскольку процесс больше не выполняет работу по запуску GTK +, он застрял в Sleep().

Правильное исправление, вероятно, состоит в том, чтобы сделать его более ориентированным на события, чтобы вы предприняли шаг в алгоритме сортировки в качестве ответа на событие. Вы можете использовать, например, <a href="http://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.html#g-timeout-add" rel="nofollow">g_timeout_add()</a> к исходным событиям, которые могут быть простыми вызовами функций прямо в вашем коде.

1 голос
/ 01 декабря 2011

Ваш спящий вызов, вероятно, находится в главном цикле событий, что приводит к зависанию всего приложения.Без источника трудно сказать вам, где поставить режим сна, чтобы сделать интерфейс отзывчивым, но сортировка «медленная»

...