Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   AsyncCalls 2.91 - Asynchrone Funktionsaufrufe in Delphi (https://www.delphipraxis.net/82530-asynccalls-2-91-asynchrone-funktionsaufrufe-delphi.html)

jbg 27. Sep 2008 18:27

Re: AsyncCalls 2.9 - Asynchrone Funktionsaufrufe in Delphi
 
Zitat:

Zitat von DeddyH
Das heißt, nur mit Delphi 2009 nutzbar?

Ja. Aber der Code is mit einem IFDEF Umgeben, so dass die "alten" Funktionen für Delphi 5 bis 2007 nutzbar bleiben.

jbg 29. Sep 2008 08:53

Re: AsyncCalls 2.9 - Asynchrone Funktionsaufrufe in Delphi
 
Nun hat mich der Delphi 2009 vor den Kopf gestoßen. AsyncCalls 2.9 ist nicht mit Delphi 2009 nutzbar, da bei einem "Make Project" ein interner Compiler Fehler auftritt. Und dass man seine Projekte immer mit "Build Project" erzeugt, halt ich für eine Zumutung.

Assertor 29. Sep 2008 09:03

Re: AsyncCalls 2.9 - Asynchrone Funktionsaufrufe in Delphi
 
Hi,

Zitat:

Zitat von jbg
Nun hat mich der Delphi 2009 vor den Kopf gestoßen. [...] nicht mit Delphi 2009 nutzbar, da [...] ein interner Compiler Fehler auftritt.

Da muß wohl noch an der Stabilität des neuen Compiler gearbeitet werden ;)

Übrigens mal ein großes, dickes

Danke

für Deine gute Arbeit!

Gruß Assertor

jbg 29. Sep 2008 09:19

Re: AsyncCalls 2.9 - Asynchrone Funktionsaufrufe in Delphi
 
[quote="Assertor"]Da muß wohl noch an der Stabilität des neuen Compiler gearbeitet werden ;)
Bei der neuen Version 2.91, die ab jetzt verfügbar ist, habe ich sämtliche Generics auskommentiert. Ich hoffe, dass das "Delphi 2009 Update 1" bald kommt, da Generics so für mich nicht wirklich nutzbar sind. Da ich nicht gerne russisches Roulette spiele.

Zitat:

Übrigens mal ein großes, dickes Danke
Danke.

Assertor 2. Okt 2008 14:25

Re: AsyncCalls 2.91 - Asynchrone Funktionsaufrufe in Delphi
 
Hi,

so und um jetzt mal dem theoretischen Teil der Forschung und Entwicklung etwas mehr Breite zu verpassen, hier eine Thread Library für Delphi von Primoz, dem Autoren von OmniXML:

OmniThreadLibrary

Gruß Assertor

BloodySmartie 1. Dez 2008 16:13

Re: AsyncCalls 2.91 - Asynchrone Funktionsaufrufe in Delphi
 
Ich bin mir noch nicht ganz sicher ob es nicht doch an mir liegt, aber ich glaube ich habe einen Bug gefunden.

In der Execute-Prozedur eines Threads passiert u.a. folgendes:
Delphi-Quellcode:
  c:=qry.RecordCount;
  setlength(self.Machines,c);
  qry.First;

  for I := 0 to c - 1 do begin
    tmps:=utf8toansi(qry.FieldByName('phonenumber').AsString);
    p:=localFindMachine(tmps);
    EnterMainThread;
    try
      p^.isDeleted:=true;
      p^.isactive:=false;
    finally
      LeaveMainThread;
    end;
    qry.Next;
  end;
Soweit ich das nun verfolgen konnte, hat c zunächst den erwarteten Wert - nämlich die Zahl der Datensätze aus meiner SQL-Abfrage. Nach LeaveMainThread hat c aber den Wert 0.

Vielleicht habe ich aber auch die Funktionsweise von EnterMainThread / LeaveMainThread falsch verstanden.

jbg 1. Dez 2008 16:50

Re: AsyncCalls 2.91 - Asynchrone Funktionsaufrufe in Delphi
 
Wo hast du c denn deklariert?
Wird noch von woanders darauf zu gegriffen?
"for I := 0 to c - 1 do begin" Der Compiler braucht c nach dieser Zeile nicht mehr, da die Schleife rückwärts laufen kann. Der Debugger weiß das aber nicht und zeigt möglicherweise den Inhalt an, der zufälligerweise im CPU Register steht, das vorher für c benutzt wurde.

BloodySmartie 1. Dez 2008 16:59

Re: AsyncCalls 2.91 - Asynchrone Funktionsaufrufe in Delphi
 
c ist lokal deklariert und ich greife weiter unten nochmal in einer Verzweigung darauf zu, in der ich Prüfe, ob c größer als 0 ist. Das schlug dauernd fehl, so bin ich auf das Problem gestoßen.

sirius 1. Dez 2008 17:02

Re: AsyncCalls 2.91 - Asynchrone Funktionsaufrufe in Delphi
 
Dein Compiler dürfte dir eine Warnung ausgeben: "c nach Schleifendurchlauf undefiniert" oder so ähnlich

BloodySmartie 1. Dez 2008 17:06

Re: AsyncCalls 2.91 - Asynchrone Funktionsaufrufe in Delphi
 
Eine solche Warnung bekomme ich auch nicht. Das verstehe ich jetzt sowieso nicht. Warum sollte mein Compiler denn c einfach wegwerfen, nur weil ich es in der Schleife verwende? besonders, wo es ein paar Zeilen weiter unten ja noch gebraucht wird. Das habe ich auch vorher noch nie beobachtet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 Uhr.
Seite 2 von 3     12 3      

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