Intereting Posts
Использование двойного hashа (##) в C rename () работает только в директории, в которой работает программа? Поведение extern в C Не удается записать файлы в Windows Использование барьеров памяти для принудительного выполнения заказа Каир и утечки памяти исправить с valgrind Неверный формат sprintf ‘% d’ C – ‘char **’ отличается в уровнях косвенности от ‘char (*) ‘ Как получить каталог файла, который вызывается из аргумента командной строки? В Xlib, Как я могу оживить, пока не произойдет событие? Как найти имена установленных драйверов на моем компьютере в C? Почему мой висячий указатель не вызывает ошибку сегментации? Почему моя программа выдает ошибку сегментации при использовании памяти, выделенной кучей? Пожалуйста, дайте мне знать, как работает оператор <> в C? C для индексирования циклов: ускоренная перемотка вперед в новых процессорах?

Как изменить метку в GTK во время работы программы; из отдельной нити

Я создаю многопоточное приложение, которое автоматически отображает данные о погоде и автоматически обновляется в C. Я получил данные о погоде для обновления и загрузки в переменные. У меня возникли проблемы с изменением значений в середине программы. Когда я использую

gtk_label_set_text(GTK_LABEL(wsrc->text2), wsrc->deg); 

я получил

 (out:7604): Gtk-CRITICAL **: gtk_label_set_text: assertion `GTK_IS_LABEL (label)' failed 

Как мне это сделать. Вызов из отдельного streamа из основного, что петли для возобновления meteorологических данных.

Использую ли я сигналы для создания триггера для обновления данных о погоде. Ищу совет 🙂

Не вызывайте методы GTK + извне – это основной stream, период. Я знаю, что есть обходные пути, но 99,99% времени, когда вы действительно не хотите этого делать.

Вместо этого вы должны сделать следующее:

 /* in your other thread do this: it will make sure update_text2 will be called in GTK+ main thread */ g_main_context_invoke (NULL, update_text2, wsrc); static gboolean update_text2 (gpointer userdata) { my_obj* wsrc = (my_obj*) userdata; gtk_label_set_text(GTK_LABEL(wsrc->text2), wsrc->deg); return G_SOURCE_REMOVE; } 

Я не тестировал этот код и не знаю тип вашего указателя wsrc, но я уверен, что вы получите дрейф.