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 |