Intereting Posts
Странное поведение argv при передаче строки, содержащей «!!!!» слишком мало аргументов для функции и не может использоваться как функция – начало C EndOfFile в C – EOF Portaudio не будет воспроизводить звук, если в настоящее время воспроизводится другая программа Как память управляется для не объявленных объектов на языке C? Что происходит, когда указатель float присваивается указателю на char? Использование stdlib.h в драйвере устройства GNU Сделать «Abort trap: 6» после вызова gcc, однако вызов действителен только при выполнении C: Удалить дубликаты из несвязанного связанного списка. Почему неинициализированная переменная в C все еще производит выход Правильный способ выделения и освобождения массивов указателей на массивы Получить полный путь к файлам в C Могут ли переменные внутри упакованных структур читать атомарно? Функция, которая проверяет, сколько раз каждый элемент появляется в массиве Как сделать тип возвращаемого массива функцией C?

Внедрение SDL в GTK +

У меня есть приложение, которое использует GTK + для отображения некоторого приятного графического интерфейса, но я использую SDL для отображения небольшого буфера кадров RGB внутри GTK +

Я использовал следующий код, чтобы получить SDL в GTK +:

char SDL_windowhack[32]; sprintf(SDL_windowhack, "SDL_WINDOWID=%ld", GDK_WINDOW_XWINDOW(deviceWindow->window)); putenv(SDL_windowhack); 

К сожалению, я также использую SDL для событий клавиатуры и мыши. Основной stream, который использует SDL для обновления изображения, порождает следующий stream:

 void *SDLEvent(void *arg) { SDL_Event event; while (1) { fprintf(stderr, "Test\n"); SDL_WaitEvent(&event); switch (event.type) { /* ... */ } } } 

Я вижу, что оператор печати выполняется дважды, а затем нет. Как только я завершаю stream, который использует SDL для обновления экрана (дисплея), цикл в SDLEvent начинает работать очень быстро.

Этот код работал отлично, прежде чем я интегрировал SDL в GTK +, поэтому я думаю, что GTK + может быть каким-то образом заблокировать SDL?

Есть ли у кого-нибудь предложения, пожалуйста?

Большое спасибо!

Хотя я не использовал SDL, но, поскольку вы ищете события, кажется, что вы запускаете два цикла событий. Gtk запускает собственный цикл событий, который обрабатывает такие события, как те, что используются с помощью мыши и клавиатуры. Я думаю, вам нужно найти способ интегрировать оба. Некоторая ошибка в googling привела к следующей ссылке, где в разделе «Double loop loop issue» проблема была решена (я думаю). Попробуйте добавить функцию SDLEvent как функцию g_idle_add используя g_idle_add как показано в ссылке, и посмотрите, работает ли она.
Надеюсь это поможет!