Вот, есть окно, в нём GtkImage. Создаётся поток, в котором вызывается gtk_image_set_from_file(). Но после какой-то каждый раз разной картинки главное окно перестаёт обновляться и виснет, а поток работает дальше. Что здесь не так?
#include <gtk/gtk.h>
void * thread_recv (void *);
int main (int argc, char ** argv){
GtkWidget * window;
GtkWidget * image;
GError *error = NULL;
/* init threads */
g_thread_init(NULL);
gdk_threads_init();
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
image = gtk_image_new ();
gtk_window_set_default_size (GTK_WINDOW(window), 600, 400);
gtk_container_add (GTK_CONTAINER(window), image);
g_signal_connect (G_OBJECT(window), "delete_event",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all (window);
if (!g_thread_create(thread_recv, image, FALSE, &error)){
g_printerr ("Failed to create thread: %s
", error->message);
}
gdk_threads_enter();
gtk_main ();
gdk_threads_leave();
return 0;
}
void * thread_recv (void * image){
int i = 0;
while(1){
char name[256];
//
//
//папка с картинками img_000.jpg, img_001.jpg...
sprintf(name, "/home/png/Desktop/temp/img_%.3d.jpg", i%100); ++i;
g_print("%s
", name);
(g_usleep(300000));
gtk_image_set_from_file(GTK_IMAGE(image), name);
gtk_widget_queue_draw(image);
}
return 0;
}
Пользователь решил продолжить мысль 18 Мая 2011, 00:57:50:
Ни у кого идей нет? Тогда пофиг.