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

    Finestra perl/tk non risponde

    Ciao a tutti,
    premetto che non sono un programmatore ma da qualche tempo eseguo semplici script in perl che elaborano file o interrogano database. In questi giorni mi sto avvicinando a Perl/tk per inserire questi script in finestre windows in modo da poter aggiungere bottoni, listbox ecc... e rendere così l'applicazione più interattiva ma mi scontro con un problema che non riesco a risolvere in nessun modo. Oggi questi script ciclano in continuazione scanditi da alcuni sleep posti nello script e quando li integro in finestre GUI queste mi si bloccano finchè il tempo impostato nello sleep non è trascorso.
    Inserisco un esempio per farvi capire meglio e spero che qualcuno sappia aiutarmi....

    Grazie a tutti.

    use Tk;

    $mw = MainWindow->new;
    $mw->title('text');

    $lb = $mw->Scrolled('Text',-width => 40,-height => 16,-background => yellow,-font => 'Tahoma 10 bold',-scrollbars => 'osow');

    $lb->tagConfigure('BLUE',-foreground => 'blue');
    $lb->tagConfigure('LTBLUE',-foreground => 'light blue');
    $lb->tagConfigure('RED',-foreground => 'red');
    $lb->tagConfigure('GREEN',-foreground => 'green');
    $lb->tagConfigure('LTRED',-foreground => 'orange');
    $lb->tagConfigure('LTGREY',-foreground => 'light grey');
    $lb->tagConfigure('YELLOW',-foreground => 'yellow');

    $via = $mw->Button(-text => 'Start',-width => 4,-height => 1,-font => 'Tahoma 15 bold',-command => \&message);
    $exit = $mw->Button(-text => 'Exit',-width => 4,-height => 1,-font => 'Tahoma 15 bold',-command => [$mw => 'destroy']);

    $lb->pack;
    $via->pack(-side => 'left',-expand => 1);
    $exit->pack(-side => 'left',-expand => 1);
    MainLoop;

    sub message {
    INIZIO:
    {
    while ($message<5)
    {
    $message++;
    $lb->insert('end', $message."\n", 'RED');
    $lb->update;
    sleep 5;
    }
    $message="prova"."\n";
    $lb->insert('end', $message,'BLUE');
    $lb->update;
    sleep 5;
    redo INIZIO;
    }
    }

  2. #2
    ma quale sarebbe il problema?
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  3. #3
    Il problema è che quando hai avviato la sub dal pulsante "start" e quindi si avvia il ciclo di conteggio l'aplicazione non risponde più quando arriva allo sleep, nel senso che non posso spostare la finestra ne chiuderla e nemmeno premere il pulsante "exit".
    Ho gia provato a fare di tutto con after, con DoOneEvent ma non so.....
    Ora quello è un esempio, immagina che al posto del ciclo di conteggio io debba inserire una query su un database che gira ogni 30 minuti e che invia una e-mail con il risultato.
    Probabilmente sbaglio anche la logica di programmazione però deve esserci un modo per far si che perl mi ridia il controllo della finesta quando la clicco per muoverla o se devo premere exit per chiuderla.

    Mi sembra che in vb ci sia un comando DoEvents che rilascia temporaneamente ad ogni ciclo di cpu il controllo alla macchina del programma in modo che risponda agli eventi esterni anche se sta lavorando.

    Spero di essermi spiegato un po' meglio ma devi scusarmi faccio fatica anche a trovare la terminologia da programmatore adatta per agevolare un possibile aiuto e per risolvere il vero problema.

    Grazie ancora per il tuo aiuto.

  4. #4
    Non conosco bene le librerie Tk per cui non so darti risposte che derivino da loro.

    Penso comunque che si potrebbe fare eseguire il codice che ti blocca lo script sotto un processo figlio ovvero dopo una chiamata "fork", in quanto ciò che fa il filgio non influenza il processo padre, ovvero la finistra.
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  5. #5
    Ho letto anch'io che si può usare il fork o threads ma non ci capisco un tubo, non hai qualche piccolo esempio perchè quelli che trovo non li capisco.

    Grazie

  6. #6
    hai provato a leggere questo?

    http://pod2it.sourceforge.net/pods/perlfork.html

    qui c'è un esempio base:

    http://www2.units.it/~mumolo/PERL.ppt
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

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.