[ Dementia @ 01.12.2009. 11:32 ] @
Code:

procedure update;
begin
  if DownloadFile(MyURL, GetMyDir + 'text.txt') then
  begin
      if FileExists(GetMyDir + 'text.txt')then read_file;
  end
  else
    ShowMessage('An error occurred.')
end;




Server mi cesto trokira nesto, i onda kada se pozove ova funkcija iz mog programa, program totalno zablokira, jer ne moze da preuzme fajl kada server pocne da zeza... i tek posle 20-ak sekundi prikaze ShowMessage('An error occurred.'). -Prikazuje odmah ovu poruku ako je server totalno off...

Kako da uradim neki tajmer recimo da ako nema odgovora za 4 sekunde, da prikaze poruku ShowMessage('An error occurred.')

Ako moze neki primer koda bio bih puno zahvalan!

Poz.

[Ovu poruku je menjao Dementia dana 01.12.2009. u 13:21 GMT+1]
[ Vic @ 01.12.2009. 11:41 ] @
Koristi try/except funckiju i u okviru nje dodaj da se uključi timer (timer1.enabled:=true)
[ Dementia @ 01.12.2009. 12:21 ] @
Vec koristim try/except

ovo se poziva

function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
except
Result := False;
end;
end;


Ne bih da koristim tajmere (pogresno sam nazvao temu, sad cu da ispravim :) ), vec planiram GetTickCount, ali ne znam kako bih to mogao da izvedem...
[ savkic @ 01.12.2009. 14:02 ] @
> Kako da uradim neki tajmer recimo da ako nema odgovora za 4 sekunde, da prikaze poruku ShowMessage('An error occurred.')
> if DownloadFile(MyURL, GetMyDir + 'text.txt') then

Pozivaš funkciju u blokirajućem obliku (tek kada se završi vraća e kontrola programu), možeš je ili koristiti u neblokirajućem (asinhronom) prosleđivanjem i poslednjeg callback parametra, prebacivanjem downloada u poseban thread ili upotrebom drugih biblioteka za download koji dopuštaju i timeout (npr, Indy, Synapse...)
[ Dementia @ 01.12.2009. 18:06 ] @
Pa i sa threadom korisnik ima da ceka pola minuta(tj dok mi server trokira, tj radi JAKO usporeno preko dana) dok dobije odgovor, doduse program nece da zablokira, ali korisnik nece isto brzo dobiti odgovor da server nije dostupan... ovo moze da se resi iz jedne do dve linije koda, proveravanjem proteklog vremena, ako npr za 4 sekunde nema odgovora od servera, bez ikakvih threadova, ali ne znam kako to da izvedem...


Potrazicu odgovor na drugom forumu, hvala u svakom slucaju.
Poz