Forum: Object-Pascal / Delphi-Language
by argonix,
16. Jan 2010
So, jetzt läuft wirlich alles! Die verbelibenden Fehler hatte alle mit der grafikbibliothek Qt4 zu tun und sind jetzt behoben. Ein "CriticalSection" in den Zeichenfunktionen hat sich dabei als sehr sinnvoll herausgestellt, obwohl da nur gelesen wird. (Aber wenn man versucht, was zu lesen was nicht existiert ist das halt ein Problem...)
Nochmals vielen Dank! :bounce1:
Forum: Object-Pascal / Delphi-Language
by argonix,
15. Jan 2010
Wow! Ich habe jetzt mal die entsprechenden Stellen mit CriticalSections geschützt und - voilà, seit 2 Minuten keine Fehler mehr!
Hoffentlich bleibt das so... Aber schonmal vielen Dank! :thumb: Sieht bis jetzt super aus!
EDIT: Zu früh gefreut... Ich bekomme wieder SIGFPEs ohne Backtrace... Der Fehler kann aber überall anders auch liegen. Ich schaue mir das nochmal genauer an.
Forum: Object-Pascal / Delphi-Language
by argonix,
15. Jan 2010
Es wird nichts gemeinsam genutzt. Es wird nur ein Signal von einem zum anderen Thread gesendet, einen Zahlenwert um X einheiten zu erhöhen.
Wann wo wie welcher Thread daten nutzt ist aber wirklich unmöglich vorherzusagen. Es hängt von einem Threadinternen wert ab, der in Execute() bearbeitet wird, ob Thread1 ein Signal über das Linkobjekt an Thread2 sendet.
Wie benutze ich das...
Forum: Object-Pascal / Delphi-Language
by argonix,
15. Jan 2010
Okay... Also das Zwischenobjekt ist in etwas so definiert:
TConnection = class
private
owner: TWThread;
weight: Double;
public
constructor Create(aOwner: TWThread;aConn: TWThread);
procedure ProcessSignal();
end;
Forum: Object-Pascal / Delphi-Language
by argonix,
15. Jan 2010
Mein problem ist ja eigentlich folgendes: Ich entwickle eine wissenschaftliche Anwendung, welche dummerweise diese ganzen Threads braucht. (es geht um eine Biosimulation)
Allerdings funktioniert das zusammenspiel manchmal, aber maistens empfängt die Anwendung ein SIGFPE- oder SIGSEGV-Signal (ich nutze Linux). Der Debugger kann die Fehlerstelle nicht finden und die Assemblerdaten sind wertlos....
Forum: Object-Pascal / Delphi-Language
by argonix,
15. Jan 2010
Ja, die probiere ich grade auch aus.
Muss das TCriticalSection-Objekt eine globale variable sein? Oder kann jeder Thread eine eigene Instanz verwenden?
Forum: Object-Pascal / Delphi-Language
by argonix,
15. Jan 2010
Ich meine: Warum gibt es dann zwei Arten von Synchronize? Eine mit einem Thread als Parameter und eine ohne?
Ich lese mir das mal durch... Eine "einfachere" Möglichkeit scheint es nicht zu geben, oder?
Forum: Object-Pascal / Delphi-Language
by argonix,
15. Jan 2010
Und wofür genau ist dann class procedure Synchronize(AThread: TThread; AMethod: TThreadMethod);?
Kritische Abschnitte - wie funktioniert das genau mit Delphi? Gibt es da eine Anleitung zu?
Forum: Object-Pascal / Delphi-Language
by argonix,
14. Jan 2010
Hallo!
Ich habe folgendes (merkwürdige) Problem:
In einem Thread werden Werte an andere Threads vergeben. Diese Threads werden vom Mainthread ausgeführt. Der Thread, der Werte an die anderen Threads senden soll, hat eine Liste von Objekten, welche eine Referenz zu den anderen Threads halten.
Wenn ich also dieses Signal an alle Threads in der Liste senden will, müsste ich prinzipiell sowas...