AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Versionsnummer abfragen per Thread

Versionsnummer abfragen per Thread

Ein Thema von SittingDuck · begonnen am 16. Jan 2006 · letzter Beitrag vom 19. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2   
SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#1

Versionsnummer abfragen per Thread

  Alt 16. Jan 2006, 00:10
Tach auch ...

Ich habe eine Schnellstartleiste programmiert
http://home.arcor.de/stefan.moka/launcher/Snap1.png
und möchte nun beim Start eine Versionsüberprüfung durchführen.

Dazu nutze ich folgende Funktion:

Delphi-Quellcode:
function LoadURL(URL: String): String;
var IOpen, IURL: HINTERNET; Read: Cardinal; Msg: array[0..4096] of Char;
begin Result := '';
 IOpen := InternetOpen('GetIP', INTERNET_OPEN_TYPE_PRECONFIG, '', '', INTERNET_FLAG_NEED_FILE);
 if IOpen <> nil then try
  IURL := InternetOpenUrl(IOpen, PAnsiChar(URL), nil, 0, INTERNET_FLAG_NO_UI or INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD, 0);
  if IURL <> nil then try
   repeat
    FillChar(Msg, SizeOf(Msg), 0);
    if InternetReadFile(IURL, @Msg[0], Pred(SizeOf(Msg)), Read) then Result := Result + Msg else Break;
   until Read = 0;
  finally InternetCloseHandle(IURL); end;
 finally InternetCloseHandle(IOpen); end;
end;
Das klappt auch soweit sehr gut ...
Der Start meines Programmes verzögert sich jedoch weil so
eine Internet-Anfrage, je nach Leitung und Traffic schon mal
ins Stottern kommt.
Jetzt meine Frage: Wie müsste man die Funktion Thread-sicher
verpacken, damit ich, sagen wir nach 5 Sekunden das Ergebnis
aus meinem Hauptprogramm erfragen kann ?
Das Thread-Tutorial habe ich intus ... 2x sogar ... ist jedoch
nicht ganz einfach ... und entwickelt sich komplexer als erwartet.

Besten Dank für Eure Hilfe ...
SittingDuck
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: Versionsnummer abfragen per Thread

  Alt 16. Jan 2006, 01:10
Schau dir mal BeginThread / EndThread an.
Damit kann man kleinere Sachen recht einfach aus dem MainThread auslgern.

Hier gibts ein bisschen Code.


Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Versionsnummer abfragen per Thread

  Alt 16. Jan 2006, 06:57
Hi SittingDuck! Willkommen in der DelphiPraxis!

Erstmal vorneweg: Der Screenshot deiner Leiste hat mich grafisch erstmal beeindruckt.

Was deine Frage angeht: Ich nutze in einem meiner Projekte den JvHttpURLGrabber. Der macht sich recht gut und hält den Programmablauf nicht auf.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Versionsnummer abfragen per Thread

  Alt 16. Jan 2006, 15:13
Hallo nochmal ...

Erstmal Danke für die nette Begrüßung und für die
schnellen Antworten. Als Gast verfolge ich dieses
Forum schon lange, so daß die Anmeldung als Mit-
glied demnach längst überfällig war.

an chaosben: Cool ... Danke fürs Interesse ... ich
meine auch, das der URL Launcher (200KB)
ein Programm ist, was nach 5 Jahren
Entwicklungszeit tatsächlich vorzeigbar wird.
Was ich dringend bräuchte wären ein oder mehrere
Betatester ... außer mir selber ... also bedient
Euch ... Feedback always welcome !

Zur Sache: Da ich Minimalist bin möchte ich ungern
'dicke' Jedi-Komponenten in mein Programm rein-
hängen.
Im Prinzip dürfte die Thread-Geschichte
doch gar nicht so schwer sein ... was mir fehlt
ist ein sinnvoller Einstieg, ein Grundgerüst also
an dem ich erkennen kann, wie man z.B. die oben
beschriebene Funktion als seperaten Thread startet.

Vieleicht wäre jemand so nett, die noch fehlenden
Zeilen davor und dahinter zu schreiben.

Danke schonmal ... SittingDuck
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Versionsnummer abfragen per Thread

  Alt 16. Jan 2006, 15:21
Auf meiner Homepage findest du ein ausführlichen Thread-Tutorial.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Versionsnummer abfragen per Thread

  Alt 17. Jan 2006, 00:13
Hallo ...

Ja Danke für den Hinweis auf das Tutorial ... ich
habe es nun zum 3x gelesen und so langsam wird mir
klar wie der Hase laufen muss ...
Gerade habe ich meinen ersten Thread gestartet !
O.K. er hat nur 'beep;' gemacht, aber was solls ...
trotzdem ein voller Erfolg ...

Oje ... das wird eine lange Nacht ...
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat
SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Versionsnummer abfragen per Thread

  Alt 17. Jan 2006, 20:41
Tataa ... geschaft !

Es hat sogar richtig Spass gemacht ein Thread anzuschmeissen.
Ganz klassisch gelöst ... war gar nicht sooo schwer. (siehe Source)
Also es läuft ohne Fehler, aber vieleicht könnten ein paar
Thread-Experten nochmal drübergucken ... nur damit kein
Anfänger-Bullshit zwischen den Zeilen hängt.

Besten Dank

Delphi-Quellcode:

interface

type
  TGetRemoteVersionThread = class(TThread)
  protected
    procedure Execute; override;
end;

 .
 .
 .

implementation

procedure TForm1.FormCreate(Sender: TObject);
var Thread: TGetRemoteVersionThread;
begin

 Thread := TGetRemoteVersionThread.Create(True);
 Thread.FreeOnTerminate := True;
 Thread.Resume;

 .
 .
 .

end;

procedure TGetRemoteVersionThread.Execute;
var Fv,Rv: string; //FileVersion, RemoteVersion
begin
 try
  if InternetGetConnectedState(nil, 0) then begin
   Rv := LoadURL(BaseURL + 'Launcher.ver'); // Routine siehe oben
   Fv := GetFileVersion(ParamStr(0));
   with Form1.Menu1 do begin
    if Rv = Fv then
    Caption := 'You allready have the latest version (V' + Rv + ')';
    if Rv <> Fv then
    Caption := 'Update and install the latest version V' + Rv;
   end;
  end;
 except end;
end;
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Versionsnummer abfragen per Thread

  Alt 17. Jan 2006, 22:48
Hast du den Thread-Object Wizard benutzt? da steht doch oben als Kommentar, was man tunlichst nicht tun sollte:
Delphi-Quellcode:
{ Important: Methods and properties of objects in VCL or CLX can only be used
  in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure Test.UpdateCaption;
    begin
      Form1.Caption := 'Updated in a thread';
    end; }
Du greifst aber in der Execute-Methode auf ein VCL-Objekt aus dem Hauptthread unsynchronisiert zu, was man eben nicht tun sollte, da die VCL nicht threadsafe ist.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Versionsnummer abfragen per Thread

  Alt 18. Jan 2006, 14:26
OkeeDokee ... Danke für den Hinweis,
aber wer liest schon all das Kleingedruckte ...

Niemand war überraschter als ich, als der Thread
auf Anfieb lief. Wie auch immer ... jetzt sieht
die Update-Routine so aus:

Könnte man das so gelten lassen ?


Delphi-Quellcode:

interface

type
  TGetRemoteVersionThread = class(TThread)
  private
    procedure UpdateMenuCaption;
  protected
    procedure Execute; override;
  public
    Fv, Rv: string; //FileVersion, RemoteVersion
end;

type
  TForm1 = class(TForm)

 .
 .
 .

implementation

function LoadURL(URL: String): String;
var IOpen, IURL: HINTERNET; Read: Cardinal; Msg: array[0..4096] of Char;
begin Result := '';
IOpen := InternetOpen('GetIP', INTERNET_OPEN_TYPE_PRECONFIG, '', '', INTERNET_FLAG_NEED_FILE);
if IOpen <> nil then try
  IURL := InternetOpenUrl(IOpen, PAnsiChar(URL), nil, 0, INTERNET_FLAG_NO_UI or INTERNET_FLAG_PRAGMA_NOCACHE or INTERNET_FLAG_RELOAD, 0);
  if IURL <> nil then try
   repeat
    FillChar(Msg, SizeOf(Msg), 0);
    if InternetReadFile(IURL, @Msg[0], Pred(SizeOf(Msg)), Read) then Result := Result + Msg else Break;
   until Read = 0;
  finally InternetCloseHandle(IURL); end;
finally InternetCloseHandle(IOpen); end;
end;


procedure TForm1.FormCreate(Sender: TObject);
var Thread: TGetRemoteVersionThread;
begin

 Thread := TGetRemoteVersionThread.Create(True);
 Thread.FreeOnTerminate := True;
 Thread.Resume;

 .
 .
 .

end;


procedure TGetRemoteVersionThread.UpdateMenuCaption;
begin
 with Form1.Menu03 do
 if Rv = Fv then Caption := 'You allready haveelse
                 Caption := 'Update and install';
 Caption := Caption + ' the latest version V' + Rv;
end;


procedure TGetRemoteVersionThread.Execute;
begin
 try
  if InternetGetConnectedState(nil, 0) then begin
   Rv := LoadURL(BaseURL + 'Launcher.ver');
   Fv := GetFileVersion(ParamStr(0));
   Synchronize(UpdateMenuCaption);
  end;
 except end;
end;
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Versionsnummer abfragen per Thread

  Alt 18. Jan 2006, 17:45
Ja, so sieht es bsser aus.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz