Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C e GTK] Funzioni associate a segnali

    Utilizzando Glade ho costruito un'interfaccia grafica, e ho associato un segnale al clic un bottone.
    Nel codice che viene chiamato quando il segnale si attiva, fra le altre cose, ho inserito una chiamata ad una mia funzione.
    Succede questo: i risultati della mia funzione mi vengono mostrati tutti insieme, quando la funzione termina e il programma torna all'esecuzione del codice riferito al clic del bottone.
    Ad esempio, nella mia funzione metto:

    gtk_text_buffer_insert_at_cursor (buffer, "Pronto?\n", -1);
    usleep(1000000);
    gtk_text_buffer_insert_at_cursor (buffer, "Via!", -1);

    Quando eseguo l'applicazione, quello che io vedo č:

    *Pausa di 1 secondo*
    Pronto?
    Via!

    Mentre invece dovrebbe essere:

    Pronto?
    *Pausa di 1 secondo*
    Via!

    Come mai? Come posso risolvere? Aiutatemi per favore, non so davvero dove sbattere la testa e devo concludere entro la settimana
    Qualunque consiglio č graditissimo...
    Ciao a tutti

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    166
    PRemetto cho non uso assolutamente nč C nč Glade.
    Ecco il mio consiglio: prova ad aumentare l'intervallo e verifica se succede lo stesso.
    Se accade lo stesso lascia perdere il mio consiglio....
    Se non accade la mia spiegazione potrebbe essere plausibile. NON SO se corrisponda a veritā, ma credo che gtk_text_buffer_insert_at_cursor (buffer, "Pronto?\n", -1);
    impieghi dei cicli per compiere il suo lavoro e magari questo lavoro procede parallelamente al resto del codice su thread diversi...
    Quindi magari il tempo necesario per completare il lavoro č vicino a 1 secondo e,trascorrendo parallelamente, ecco il misfatto.
    Spero di non aver detto stupidaggini.
    Io programmo in Assembly e quindi non sono molto ferrato sul C.
    Ciao
    Ennio

  3. #3
    E' quello che ho pensato anch'io, infatti ho aumentato il delay a 10 secondi e poi ne ho misurati esattamente 10 in esecuzione... Purtroppo non č per quel motivo

    Grazie cmq

    Aspetto consigli

  4. #4
    ho risolto forzando l'esecuzione delle istruzioni pendenti:

    while( gtk_events_pending() )
    {
    gtk_main_iteration();
    }


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.