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

    [TURBO C++] Sleep

    Questo è il mio codice:
    Codice PHP:
    #include <windows.h>
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    list->
    GetBitmap(0,bmp);
    Image1->Picture->Assign(bmp);
    Sleep(5000);
    Label1->Caption"appena svegliato";

    Perchè alla pressione del Button1 succede che trascorrono prima 5 secondi(come previst) e contemporaneamente viene caricata la bmp e cambiato il Caption del label1....
    Io vorrei ottenere un effetto di ritardo....cioè prima il load del bmp e poi(dp 5 sec) il cambiamento del Caption....
    Dove sbaglio?
    By SirSeymour !!!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Prima della Sleep chiama un metodo per fare il refresh del controllo Image ... non so se c'e' qualcosa come

    Image1->Refresh();

    o qualcosa del genere ...

  3. #3
    bene!...funziona :-D
    ......ma.........

    Label1->Caption= "dormo";
    Sleep(5000);
    Label1->Caption= "appena svegliato";

    in questo caso?...ho provato e continua a farlo in contemporanea....

    P.S. mi spieghi perhcè quel refresh fa funzionare il tutto?
    By SirSeymour !!!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Originariamente inviato da SirSeymour
    bene!...funziona :-D
    ......ma.........

    Label1->Caption= "dormo";
    Sleep(5000);
    Label1->Caption= "appena svegliato";

    in questo caso?...ho provato e continua a farlo in contemporanea....
    Anche in questo caso, prima dello Sleep, devi inserire il Refresh, questa volta della Label1 ...

    Label1->Refresh();

    P.S. mi spieghi perhcè quel refresh fa funzionare il tutto?
    Perche' impone a Windows di ridisegnare il controllo "prima" che il thread venga "addormentato" dalla Sleep.

  5. #5
    grazie mille!
    By SirSeymour !!!

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,301
    Quando si apportano modifiche ad un controllo visuale, viene invocata una funzione API che rende "invalido" l'aspetto del controllo: questo fa sì che Windows venga informato della necessità di ridisegnarlo, esigenza che viene servita da Windows inserendo un messaggio WM_PAINT nella coda dell'applicazione.

    Se la modifica ad un membro che richiede l'aggiornamento del controllo è seguito da uno Sleep, il thread primario dell'applicazione - che si occupa di ricevere e gestire i messaggi in coda - viene messo in attesa e quindi non può che riprendere l'elaborazione solo quando il tempo di attessa è terminato, gestendo anche il messaggio in coda con cui si ottiene il ridisegno del controllo in esame.

    Per aggirare l'ostacolo, eseguendo il metodo Repaint, si bypassa la coda dei messaggi e si esegue direttamente il disegno del controllo; tuttavia, se questo viene eseguito spesso, risulta inefficiente se si trova all'interno di un algoritmo.

    In sostanza, il suo utilizzo dipende essenzialmente dallo scopo che si sta cercando di raggiungere.

    In certi casi, può essere più indicato fare uso di thread secondari in questo contesto.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.