Форум программистов, компьютерный форум, киберфорум
Кроссплатфор­менная разработка
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 3
1

Многопотоковая прога на GTK+(Glade)?

31.08.2010, 08:40. Показов 1943. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, пожалуйста, в написание многопотоковой проги на GTK+.
Нарисовал диалоговое окошко на gtk+(glade) и создал поток (pthread_create). Проблема в том, что если перестаешь производить манипуляции с диалоговым окном (например перестал двигать мышью) (то есть, как я понимаю, перестают вырабатываться сигналы), диалог.окно засыпает и вместе с ним засыпает и поток. Что сделать чтобы поток продолжал работать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main (int argc, char *argv[])
{   
  gtk_init(&argc, &argv);
  glade_init();
  xml = glade_xml_new("Fb.glade", "rootwnd", NULL);
  if(!xml)
  {
    g_warning("Failed to create the interface");
    return 1;
  }
   //pthread_create(&thread, NULL, potok, NULL);
 
  glade_xml_signal_connect(xml, "gtk_main_quit", G_CALLBACK(gtk_main_quit));
  glade_xml_signal_connect(xml, "on_checkbutton2_clicked", G_CALLBACK(on_checkbutton2_clicked));
  glade_xml_signal_connect(xml, "on_checkbutton1_clicked", G_CALLBACK(on_checkbutton1_clicked));
  glade_xml_signal_connect(xml, "on_button1_clicked", G_CALLBACK(on_button1_clicked));
  glade_xml_signal_connect(xml, "on_button2_clicked", G_CALLBACK(on_button2_clicked));
  
  gtk_main();
 
  return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2010, 08:40
Ответы с готовыми решениями:

Нужен модуль gtk.glade Python 2.6
Пытаюсь создать программу с Gui на gtk+. Установлен Python 2.6, GTK2-Runtime, Glade Interface...

Что привычнее для Windows-программиста-GTK+, GTK#, wxWidgets, Qt, Java FX, Swing?
После Visual Basic 6, Delphi что будет привычнее?Что ближе всего к Windows?

Многопотоковая программа
Здравствуйте. Нужно разработать многопотоковую программу для вычисления произведения массива 2х2...

Многопотоковая задача
Возможно ли в форме Access'а реализовать следующую задачу: При нажатии 1 кнопки запускается на...

4
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
31.08.2010, 13:25 2
в приведенном тобою примере, поток останавливаться не может.
объясни, откуда такие выводы?
0
0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 3
31.08.2010, 15:33  [ТС] 3
Цитата Сообщение от niXman Посмотреть сообщение
в приведенном тобою примере, поток останавливаться не может.
объясни, откуда такие выводы?
У меня в диалоговом окне нарисовано поле ввода (entry) и потоковая функция выводит в это поле чередуя ноль и единицу в бесконечном цикле. Вот когда, например, я двигаю мышкой чередование происходит, а когда перестаю останавливается. Вот я и думаю, что окно засыпает ожидая событий, а вместе с ним и поток. Как сделать, чтобы вывод нуля и единицы не прекращалса?
0
Эксперт С++
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
31.08.2010, 16:56 4
у тебя перестает обновляться окно. но поток работает. сделай вывод в консоль.
и покажи весь код.
0
0 / 0 / 0
Регистрация: 31.08.2010
Сообщений: 3
31.08.2010, 17:08  [ТС] 5
Цитата Сообщение от niXman Посмотреть сообщение
у тебя перестает обновляться окно. но поток работает. сделай вывод в консоль.
и покажи весь код.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <stdlib.h>
#include <stdio.h>
#include <gtk/gtk.h>
#include <glade/glade.h>
#include <pthread.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <unistd.h>
 
GladeXML *xml;
GtkWidget *entry1, *entry2, *entry5;;
unsigned short awBuf[64];
static char screen[32];
int ism=1, ism1=1, buf=7, buf1=8;
gboolean bool;
pthread_attr_t attr;
pthread_t thread;
int a=1, b=0;
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
void* potok(void* arg)
{
    //int a=1, b=0;
    entry5 = glade_xml_get_widget(xml, "entry5");
while(1)
{   
  sprintf(screen, "%i\0", a);
  gtk_entry_set_text(GTK_ENTRY(entry5), screen);
    
  sleep(1);
    
  sprintf(screen, "%i\0", b);
  gtk_entry_set_text(GTK_ENTRY(entry5), screen);
  sleep(1);
}
return NULL; 
}
//---------------------------------------------------------------------------------
void on_checkbutton2_clicked(gpointer user_data, GtkCheckButton *checkbutton2)
{
  bool = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton2));
  if (bool == TRUE) awBuf[0]=1; else awBuf[0]=0;
  sprintf(screen, "%li\0", awBuf[0]);
  gtk_entry_set_text(GTK_ENTRY(user_data), screen);
}
//---------------------------------------------------------------------------------
void on_button1_clicked(GtkButton *button)
{
  //pthread_attr_init(&attr);
  //pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
  pthread_create(&thread, NULL, &potok, NULL);
  //pthread_join(thread, NULL);
}
//---------------------------------------------------------------------------------
void on_button2_clicked(GtkButton *button)
{
    //pthread_exit(thread);
    gtk_main_quit();
    
}
//---------------------------------------------------------------------------------
int main (int argc, char *argv[])
{   
  //pthread_create(&thread, NULL, potok, NULL);
   
  gtk_init(&argc, &argv);
  glade_init();
  xml = glade_xml_new("Fb.glade", "rootwnd", NULL);
  if(!xml)
  {
    g_warning("Failed to create the interface");
    return 1;
  }
  //entry5 = glade_xml_get_widget(xml, "entry5");
 
  entry1 = glade_xml_get_widget(xml, "entry3");
  sprintf(screen, "%i\0", buf);
  gtk_entry_set_text(GTK_ENTRY(entry1), screen);
  
  entry2 = glade_xml_get_widget(xml, "entry4");
  sprintf(screen, "%i\0", buf1);
  gtk_entry_set_text(GTK_ENTRY(entry2), screen);
  
  pthread_create(&thread, NULL, potok, NULL);
 
  glade_xml_signal_connect(xml, "gtk_main_quit", G_CALLBACK(gtk_main_quit));
  glade_xml_signal_connect(xml, "on_checkbutton2_clicked", G_CALLBACK(on_checkbutton2_clicked));
  glade_xml_signal_connect(xml, "on_checkbutton1_clicked", G_CALLBACK(on_checkbutton1_clicked));
  glade_xml_signal_connect(xml, "on_button1_clicked", G_CALLBACK(on_button1_clicked));
  glade_xml_signal_connect(xml, "on_button2_clicked", G_CALLBACK(on_button2_clicked));
  
gtk_main();
//
return 0;
}
0
31.08.2010, 17:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.08.2010, 17:08
Помогаю со студенческими работами здесь

Преобразовать объект gtk.Image или gtk.gdb.Pixbuf в PIL.Image
Делаем скриншот, дальше требуется его обрезать/перерисовать/еще что нибудь, в gtk.image таких...

При компиляции g++ выдаёт "gtk/gtk.h: No such file or directory"
fatal error: gtk/gtk.h: No such file or directory Как исправить? Что установить?

combobox + glade
Здравствуйте помогите разобраться с combobox не как не пойму как это работает с glade то есть в...

Eclipse и Glade
Нужно написать калькулятор в Эклипсе с форомй... Создал в Glade форму... на выход получился...

Установка Glade 2.12.1 из нескольких пакетов
Уважаемые форумчане! Пытаюсь поставить программу Glade 2.12.1 В консоли пишу : dpkg...

Ошибки компиляции OpenCV Gtkmm Glade
Помогите с такой вот выдачей при компиляции: t1tan@T1TAN-debian-PC:~/GladeProj$ cmake . --...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru