Mam program który liczy różne rzeczy i potrafi pokazać swoje obliczenia w konsoli (ncurses), ale tworzę do niego GUI w Wx. Skóra nie ma być mądra, ma tylko wyświetlać co jej konsola karze.
Program jest obecnie 4 wątkowy, jeden wątek to WxGUI, drugi to przekazywanie poleceń do GUI reszta raczej nie istotna.
Niestety program się wykłada z niezrozumiałego dla mnie powodu.
Wątek zapisujący wywołuje takie coś
skorkaWx->ustawText(TEXT_VALUE, wartosc);
Odbiera to metoda:
void SkorkaWx::ustawText(int ID_ELEMENTU, std::string &tekst)
{
wxTextCtrl *pole_tekstowe;
wxString text_wx(tekst.c_str(), wxConvUTF8);
switch (ID_ELEMENTU)
{
case TEXT_VALUE: pole_tekstowe = text_czas_label;
break;
}
pole_tekstowe -> Clear();
pole_tekstowe -> WriteText(text_wx);
}
Gdy robię tylko jeden zapis to tekst się ładnie pojawia, przy dwóch czasami pojawia się ostrzeżenie:
(program:5121): GLib-GObject-CRITICAL **: g_object_ref: assertion `object->ref_count > 0' failed
(program:5121): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(program:5121): Pango-CRITICAL **: pango_layout_get_text: assertion `PANGO_IS_LAYOUT (layout)' failed
A gdy puszczam to na dużej prędkości i jest kilka pól do uzupełnienia to kładzie się po 1-2 sekundach.
Stack Trace
Thread 4 (Thread 0x7f1ef3fff700 (LWP 5140)):
#0 0x00000037c9624add in pango_layout_get_cursor_pos () from /usr/lib64/libpango-1.0.so.0
#1 0x00000037ca2cc5cb in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
#2 0x00000037ca2ccb51 in ?? () from /usr/lib64/libgtk-x11-2.0.so.0
#3 0x00000037cae1e1a6 in ?? () from /usr/lib64/libgdk-x11-2.0.so.0
#4 0x00000037c0e41e33 in g_main_context_dispatch () from /lib64/libglib-2.0.so.0
#5 0x00000037c0e42610 in ?? () from /lib64/libglib-2.0.so.0
#6 0x00000037c0e42c82 in g_main_loop_run () from /lib64/libglib-2.0.so.0
#7 0x00000037ca34b0b7 in gtk_main () from /usr/lib64/libgtk-x11-2.0.so.0
#8 0x00000037d65e74f8 in wxEventLoop::Run() () from /usr/lib64/libwx_gtk2u_core-2.8.so.0
#9 0x00000037d666499b in wxAppBase::MainLoop() () from /usr/lib64/libwx_gtk2u_core-2.8.so.0
#10 0x0000000000419729 in SkorkaWx::OnRun() ()
Ja coś źle rozumuje czy jest bug w libpango?
Jeśli nie robię Clear() to chwilę dłużej wytrzymuje program.