Repository 32bit  Forum
Repository 64bit  Wiki

[GTK+] Problema con immagini caricate in sequenza [RISOLTO]

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

[GTK+] Problema con immagini caricate in sequenza [RISOLTO]

Messaggioda scorpion77 » mar giu 03, 2008 16:28

Ciao a tutti,
ho un problema con un programma GTK+ che sto scrivendo. Ho pensato di mettere una barra di progresso che ogni tot secondi aumenta un po'. Quindi ho usato dieci immagini .png (progress1.png, progress2.png, ecc.) che indicano lo stato di progresso. Il problema è che se creo una finestra con la prima immagine, se metto una funzione che blocca l'esecuzione del programma di 5 secondi, il programma disegna la finestra dopo 5 secondi. Non so se ho reso bene l'idea.
Esempio:

nella finestra appare progress1.png

XX

dopo 5 secondi diventa così (progress2.png)

XXXX

dopo altri 5 secondi (progress3.png)

XXXXXX

e così via. Ad ogni passaggio, l'immagine con la barra di progresso viene sovrascritta da un'altra. Almeno dovrebbe fare così, invece disegna solo l'ultima, la progress10.png, facendomi aspettare 45 secondi (9 sleep da 5 secondi ciascuno).

Questa è la porzione di codice che posiziona le immagini con la barra di progressione:


fix = gtk_fixed_new ();
image = gtk_image_new_from_file("progress1.png");
gtk_fixed_put (fix, image, 230, 340);
gtk_container_add (GTK_CONTAINER (win), fix);
gtk_widget_show_all (win);

system( "sleep 5s" );

gtk_container_remove (GTK_CONTAINER (win), fix);
fix = gtk_fixed_new ();
image = gtk_image_new_from_file("progress2.png");
gtk_fixed_put (fix, image, 230, 340);
gtk_container_add (GTK_CONTAINER (win), fix);
gtk_widget_show_all (win);

system( "sleep 5s" );

gtk_container_remove (GTK_CONTAINER (win), fix);
fix = gtk_fixed_new ();
image = gtk_image_new_from_file("progress3.png");
gtk_fixed_put (fix, image, 230, 340);
gtk_container_add (GTK_CONTAINER (win), fix);
gtk_widget_show_all (win);


Prima posiziono l'immagine d'inizio progresso, poi cancello il container e metto l'immagine di progresso n. 2 e via di seguito fino all'immagine 10.
Se voglio che tra un'immagine e l'altra voglio che passino 5 secondi, ho pensato di usare il comando bash "sleep 5s". La stessa cosa avviene se piazzo un ciclo for che duri qualche secondo. Ma con questo non viene visualizzata subito la finestra. Viene visualizzata dopo 5 secondi, facendo apparire progress2.png, saltando progress1.png. Quindi non posso fare la scaletta progress1.png - 5 secondi - progress2.png - 5 secondi - progress3.png, ecc.
E' possibile riuscire a disegnare la finestra, fare attendere del tempo con la finestra e gli oggetti contenuti disegnati, prima di rifare il container con nuovi oggetti dentro?

Grazie in anticipo dell'aiuto.

Scorpion77
Ultima modifica di scorpion77 il lun giu 09, 2008 17:34, modificato 1 volta in totale.
Avatar utente
scorpion77
Linux 1.0
Linux 1.0
 
Messaggi: 92
Iscritto il: gio gen 20, 2005 0:00
Nome Cognome: Andrea
Slackware: Slackware64 14.1
Desktop: KDE 4.10.5

Re: [GTK+] Problema con immagini caricate in sequenza

Messaggioda HdS619 » gio giu 05, 2008 0:37

Ciao, lo sleep blocca tutto il programma, mentre te devi solo fermare la progress bar :).. l'unica è passare il controllo del timeout dello sleep in background tramite fork e poi comunicare tramite pipe col programma principale che si occuperà di caricare le altre immagini ;)
HdS619
Linux 1.0
Linux 1.0
 
Messaggi: 1
Iscritto il: gio giu 05, 2008 0:35

Re: [GTK+] Problema con immagini caricate in sequenza

Messaggioda scorpion77 » gio giu 05, 2008 10:03

HdS619 ha scritto:Ciao, lo sleep blocca tutto il programma, mentre te devi solo fermare la progress bar :).. l'unica è passare il controllo del timeout dello sleep in background tramite fork e poi comunicare tramite pipe col programma principale che si occuperà di caricare le altre immagini ;)


Grazie della dritta, solo che non ho mai usato il comando fork(), quindi mi risulterebbe un po' difficile.
Comunque ho risolto in un altro modo, usando la funzione g_timeout_add() di GTK+, questa è la parte di codice dove si ripete la funzione ogni 1000 millisecondi.


g_timeout_add(1000, (GSourceFunc) time_handler, (gpointer) win);
gtk_widget_show_all(win);
time_handler(win);


Comunque l'idea del fork mi interessa, se possibile potresti postare un'esempio pratico?

Grazie,

Scorpion77
Avatar utente
scorpion77
Linux 1.0
Linux 1.0
 
Messaggi: 92
Iscritto il: gio gen 20, 2005 0:00
Nome Cognome: Andrea
Slackware: Slackware64 14.1
Desktop: KDE 4.10.5

Re: [GTK+] Problema con immagini caricate in sequenza

Messaggioda carocco » gio giu 05, 2008 10:48

Ciao! Hai provato anche a usare il widget gtk_progress_bar? (A meno che tu non abbia particolari necessita' personali che non sono coperte da questo)

Per quanto riguarda il fork, l'uso del comando e' molto semplice:

Codice: Seleziona tutto
#include <sys/types.h>
#include <unistd.h>

int main(int argc, char **argv)
{
        int pid;
        /* e altre variabili */

        pid = fork();

        if(pid == -1)
        {
                 perror("fork");
                 exit(-1);
        }

        if(pid == 0)
        {
               /* codice eseguito dal processo figlio */
        }
        else
        {
              /* codice eseguito dal padre */
        }

        return 0;
}


Il padre e figlio sono due processi che girano in parallelo.
Avatar utente
carocco
Linux 1.0
Linux 1.0
 
Messaggi: 49
Iscritto il: gio apr 12, 2007 14:31


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti