czosnek17 Temat założony przez niniejszego użytkownika |
[GTK+] Jak w końcu idzie ten program... » 2012-08-28 21:49:47 W programie, który teraz piszę jest pętla(a właściwie będzie, tylko właśnie jest problem), w której wykonywane są obliczenia gry. Dlatego nie chcę jej opuszczać, tylko próbuję w ten sposób: void funkcjaY() { kod_c; }
void funkcjaX() { g_signal_connect( do funkcjaY ) if( aaa == true ) kod_a; else kod_b; } int main() { aaa = false; z tad przechodze do funkcjaX(); }
Działa tak: 1. Kod_b 2. Po wejściu w funkcjaY wykonuje się tylko kod_c I tu jest problem. Po wykonaniu kod_c (można nawet wielokrotnie), nie działa kod_a i kod_b. Tzn program nie wychodzi z funkcjaY. Co mam zrobić, żeby tak się stało? |
|
xevuel |
» 2012-08-28 22:46:08 Nie wiem, pewnie powinieneś zmienić coś w programie. A tak na serio: tworzysz temat, który nie opisuje kompletnie nic. Skąd mamy wiedzieć, dlaczego nie wykona się kod_b, skoro nie wiemy, jak wygląda funkcjaY? Nie podałeś ani jednego fragmentu programu, który jest zgodny z faktycznym stanem rzeczy... Skoro "Tzn program nie wychodzi z funkcjaY", to pewnie program się zawiesza, tak? Działa tak: 1. Kod_b 2. Po wejściu w funkcjaY wykonuje się tylko kod_c |
Z pseudokodu wynika, że kod_b, jeśli sie wykona, to wykona się po wykonaniu kodu_c. Dlaczego więc umieściłeś w tym wyliczeniu kod_b na pierwszym miejscu? Także podsumowując: umieść prawidłowy kod, albo konkretnej pomocy nie dostaniesz. |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-08-28 22:55:57 Z pseudokodu wynika, że kod_b, jeśli się wykona, to wykona się po wykonaniu kodu_c. Dlaczego więc umieściłeś w tym wyliczeniu kod_b na pierwszym miejscu?
|
No wiem, że to dziwne, ale tak właśnie jest. W kodzie raczej wszystko jest dobrze. Daję 2 funkcje z problemem, mogę też dać cały kod jeżeli będzie potrzebny. void pobierz( GtkWidget * przycisk, gpointer dane ) { struct struktura * sss; sss =( struct struktura * ) dane; gtk_widget_hide( sss->graj ); const gchar * zzz = ""; const gchar * nic = "nic"; const gchar * zle = "zle"; const gchar * tr = "true"; const gchar * fa = "false"; const gchar * tab[ 10 ] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; sss->wczyt = gtk_entry_get_text( GTK_ENTRY( sss->poletxt ) ); if( !g_strcmp0( sss->wczyt, tab[ 0 ] ) || !g_strcmp0( sss->wczyt, tab[ 1 ] ) || !g_strcmp0( sss->wczyt, tab[ 2 ] ) || !g_strcmp0( sss->wczyt, tab[ 3 ] ) || !g_strcmp0( sss->wczyt, tab[ 4 ] ) || !g_strcmp0( sss->wczyt, tab[ 5 ] ) || !g_strcmp0( sss->wczyt, tab[ 6 ] ) || !g_strcmp0( sss->wczyt, tab[ 7 ] ) || !g_strcmp0( sss->wczyt, tab[ 8 ] ) || !g_strcmp0( sss->wczyt, tab[ 9 ] ) || !g_strcmp0( sss->wczyt, zzz ) ) { if( !g_strcmp0( sss->wczyt, tab[ 0 ] ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 0 ] ); sss->liczbazm = 1; } if( !g_strcmp0( sss->wczyt, tab[ 1 ] ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 1 ] ); sss->liczbazm = 2; } if( !g_strcmp0( sss->wczyt, tab[ 2 ] ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 2 ] ); sss->liczbazm = 3; } if( !g_strcmp0( sss->wczyt, tab[ 3 ] ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 3 ] ); sss->liczbazm = 4; } if( !g_strcmp0( sss->wczyt, tab[ 4 ] ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 4 ] ); sss->liczbazm = 5; } if( !g_strcmp0( sss->wczyt, tab[ 5 ] ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 5 ] ); sss->liczbazm = 6; } if( !g_strcmp0( sss->wczyt, tab[ 6 ] ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 6 ] ); sss->liczbazm = 7; } if( !g_strcmp0( sss->wczyt, tab[ 7 ] ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 7 ] ); sss->liczbazm = 8; } if( !g_strcmp0( sss->wczyt, tab[ 8 ] ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 8 ] ); sss->liczbazm = 9; } if( !g_strcmp0( sss->wczyt, tab[ 9 ] ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), sss->tab[ 9 ] ); sss->liczbazm = 10; } sss->sprawdzdane = true; if( !g_strcmp0( sss->wczyt, zzz ) ) { gtk_label_set_text( GTK_LABEL( sss->etykieta ), nic ); sss->sprawdzdane = false; } } else { gtk_label_set_text( GTK_LABEL( sss->etykieta ), zle ); sss->sprawdzdane = false; } gtk_entry_set_text( GTK_ENTRY( sss->poletxt ), zzz ); }
void gtrudny( GtkWidget * przycisk, gpointer dane ) { struct struktura * sss; sss =( struct struktura * ) dane; const gchar * tr = "true"; const gchar * fa = "false"; gtk_widget_hide( sss->graj ); const gchar * zm[ 3 ] = { "1", "2", "3" }; g_signal_connect( G_OBJECT( sss->wprowadz ), "clicked", G_CALLBACK( pobierz ), sss ); if( sss->sprawdzdane == true ) gtk_label_set_text( GTK_LABEL( sss->etykieta ), tr ); else gtk_label_set_text( GTK_LABEL( sss->etykieta ), fa ); }
|
|
xevuel |
» 2012-08-28 23:10:30 Czy g_signal_connect nie ustawia tylko jakiegoś eventu, i procedurę jego obsługi? Tzn. w tym konkretnym przypadku, czy funkcja pobierz nie wykona się dopiero po odebraniu eventu clicked? To by wtedy tłumaczyło wszystko. Program idzie tak: Nie znam GTK+ zbyt dokładnie, ale prawdopodobnie chodzi właśnie o to. |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-08-28 23:16:48 No to chyba chodzi o to :/ Jest jakiś sposób, żeby uzyskać to co chciałem (wywoływać funkcję pobierz() w określonym miejscu po kliknięciu na przycisk i po skończeniu funkcji wrócić do miejsca wywołania)? |
|
xevuel |
» 2012-08-28 23:20:30 Raczej wątpię, bo ta funkcja nie jest wywoływana z funkcji gtrudny, więc jak ma tam powrócić? Co do problemu... Czy tego kodu: if( sss->sprawdzdane == true ) gtk_label_set_text( GTK_LABEL( sss->etykieta ), tr ); else gtk_label_set_text( GTK_LABEL( sss->etykieta ), fa ); nie możesz po prostu umieścić w funkcji pobierz, skoro ma się wywoływać za każdym kliknięciem przycisku? |
|
czosnek17 Temat założony przez niniejszego użytkownika |
» 2012-08-28 23:25:56 Mogę, ale w pod g_signal_connect i tak będzie jeszcze kod. Musi tak być, jeżeli chcę wczytać tekst z pola tekstowego po wciśnięciu przycisku. |
|
xevuel |
» 2012-08-29 08:06:11 No to czemu nie umieścisz odczytania zawartości pola tekstowego w procedurze obsługi eventu clicked? To, co Ty proponujesz jest niemożliwe, bowiem funkcja gtrudny wykona się tylko raz, nie więcej. |
|
« 1 » 2 3 4 |