Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: gtk_image_set_from_file в потоке - виснет главное окно  (Прочитано 921 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн фирэфохэ

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2169
  • straightedge
    • Просмотр профиля
Вот, есть окно, в нём 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:
Ни у кого идей нет? Тогда пофиг.
« Последнее редактирование: 18 Мая 2011, 00:57:50 от фирэфохэ »
http://i18.ЗАПРЕЩЁННЫЙ РЕСУРС/big/2011/0325/6d/19eaa72dd24048a6fb0587832c4b096d.gif КДЕ - УГ. Дебиан - недоось.

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.