Newsgroup: it.comp.lang.delphi
Titolo: DOMANDA IDIOTA MA URGENTE

Sarň breve.....sto programmando proprio ora e non riesco a trovare uno
stupidissimo modo per dire al computer "fai una pausa di 1 secondo"...una
volt ain pascal bastava fare "delay(1000)" ma ora sembra ceh senza una
componente a parte o senza una procedura che confronta il tempo preso di
continuo non si riesca a fare.....possibile che non eissta una cosa cosě
stupida? Per favore rispondetemi subito....nei prox minuti controllerň il
newsgroup e spero di trovare un veloce aiuto..grazie..

 ha scritto nel messaggio
news:Vzky7.16827$1H1.1...@news.infostrada.it...

Sleep(1000)
Ciao, Marco.

 wrote in message
news:9qcl4j$683$1...@nreada.inwind.it...


Evviva finalmente ce l'ho fatta! Grazie...grazie mille!!!
Si pero' quota in modo giusto (sotto il testo, senza
riportare tutto il messaggio a cui rispondi).
Grazie.
-- 
The Follet

> Sleep(1000)
hmmm... ma questo non blocca la ricezione dei messaggi all'applicazione? Non
si rischia che i form si "blocchino" (anche il rinfresco) finché non si
rientra dallo Sleep? Non sarebbe meglio fare un ciclo di ProcessMessages
finché non è passato un secondo?
Ciao,
  Luca T.

Qualcosa del genere:
procedure Delay(msecs:integer);
var
  FirstTickCount  :DWORD;
begin
  FirstTickCount:=GetTickCount;
  repeat
   Application.ProcessMessages;
  until ((GetTickCount-FirstTickCount) >= DWORD(msecs));
end;
"Luca T." <lu...@BADBADSPAManother-world.com> wrote in message
news:t5py7.19096$1H1.1...@news.infostrada.it...



Occhio con i ProcessMessages, almeno che tu non voglia realmente
"processare" messagi nuovi: l'applicazione potrebbe entrare in flussi di
programma che "cozzano" contro quello che stai facendo nel ciclo che chiama
il delay. Inoltre finchè il processmessages non ritorna il controllo, la tua
procedura non prosegue. Insomma, non è scorretto ma potenzialmente
pericoloso...

 wrote in message
news:9qdvaq$mtblc$1...@ID-106993.news.dfncis.de...


Luca T. ha scritto nel messaggio ...

Forse è per questo che una mia applicazione, dove faccio uso di alcuni
sleep, si blocca di frequente se uso PCAnywhere via Modem?
Mi avresti risolto un grosso problema!
    Ciao
    Giulio.

Mi avresti risolto un grosso problema!
Aggiungo che mi si blocca proprio mentre tenta di "disegnare" la mia
form.... non completa la visualizzazione e poi si blocca!

finché non è passato un secondo?
Secondo me, no.
Secondo me e' piu' pericoloso forzare la lettura dei
messaggi in un'operazione che deve svolgersi in modo
atomico.  Se non si ha la certezza che l'operazione e'
interrompibile, meglio usare Sleep.
-- 
The Follet

Si, se s'intende per operazioni che debbono svolgersi in modo atomico allora
è meglio sleep... ma per pause più grandi di un secondo s'incomincia a dare
fastidio all'utente (non è bello avere un applicazione che "si inchioda" per
xx secondi senza nemmeno ridisegnarsi). Se proprio si vuole impedire che
l'utente prema dei tasti sulla form mentre è in pausa secondo me è molto
meglio disabilitare tutti i bottoni o in ogni caso tutti i controlli che
potrebbero dare fastidio. Con magari un messaggio tipo "Elaborazione in
corso"...
Bye,
  Luca T.
"The Follet" <thef...@thefollet.bye> wrote in message
news:3bd31b02...@news.tin.it...


 riprovo. :-D
Ti scombussola tutto? Strano... a me funziona... che problemi ti da?

 potrebbero dare fastidio.
Io ho risolto con una thread di refresh.
Ecco il codice:
type
  TRefreshAppThread = class(TThread)
  private
    FTimer: TTimer;
    fChildForm: TForm;
  protected
    procedure Execute; override;
  public
    constructor Create(CreateSuspended: Boolean; ChildForm: TForm);
  end;
implementation
uses windows;
constructor TRefreshAppThread.Create(CreateSuspended: Boolean; ChildForm:
TForm);
begin
  inherited create(CreateSuspended);
  fChildForm := ChildForm;
end;
procedure TRefreshAppThread.Execute;
begin
  FreeOnTerminate := True;
  while not Terminated do
  begin
    sleep(250);
    Synchronize(Application.MainForm.Repaint);
    if fChildForm <> nil then
      Synchronize(fChildForm.Repaint);
  end;
end;
Il tutto viene utilizzato cosě:
  try
      // Tread di refresh
      ThreadRefresh := TRefreshAppThread.Create(False, Self);
      // Invoco l'operazione "pesante"
     Operazione;
  finally
   // Il thread si autodistrugge alla terminazione
      ThreadRefresh.Terminate;
 end;
E devo dire che funziona egregiamente, la form e la sua eventuale child
vengono refreshate e non altero il flusso di programma.
Ciao,
G.