Portál AbcLinuxu, 11. května 2025 01:08
Glib::signal_timeout
. Pak chci novou zpravu zobrazit v novem okne. A tady je problem, protoze timeout nepokracuje dokud mu funkce nevrati true, Gtk::Window::run
ale zablokuje funkci dokud se okno nezavre. Takze prijde jen jedna zprava a pak se timeout zablokuje dokud neni okno zavreno. Chtel jsem to vyresit pres vlakna. Udelal jsem si funkci, ktera by jen zavolala Gtk::Window::run
a tu bych pouzil v Glib::Thread
. Funguje to hezky dokud ono okno nezavru, potom vypisi Xka: Xlib: unexpected async reply (sequence 0x4921)!a hlavni okno se prestane vykreslovat. Zjistil jsem, ze Xka nepodporuji vicevlaknove aplikace. Nevite nekdo jak mam kazdych x sekund v gtkmm provest nejakou funkci, ktera muze vytvorit nove okno a tim se zablokovat?
#include <gtkmm.h> class Okno : public Gtk::Window { public: Okno() { Glib::thread_init(); show(); Glib::signal_timeout().connect(sigc::mem_fun(*this, &Okno::on_timer), 5000); } bool on_timer () { Glib::Thread::create(sigc::mem_fun(*this, &Okno::thread), false); return true; } void thread() { Gtk::Window w; w.show(); Gtk::Main::run(w); } }; int main (int argc, char* argv[]) { Gtk::Main kit(argc, argv); Okno okno; Gtk::Main::run(okno); }Jak to vidim tak timhle zpusobem to asi nepujde, je to skoda, protoze nemuzu uzivatele nutit aby kazdou minutu zmackl tlacitko, pokud vytvorim okno v handlu na button_clicked, tak samozrejme vse funguje. Asi se inspiruji xchatem a udelam jen jedno okno a v nem vice zalozek.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.