Hi @all.
Ich habe in einem StringGrid eine Tabelle mit 21 Zeilen und 11 Spalten. Die Daten werden mindestens jede Sekunde von einem Thread (heißt: "tliste") aktualisiert. Mit mindestens jede Sekunde meine ich, dass der Thread "tliste" in der Regel jede Sekunde aktualisiert, wenn er allerdings von dem Hauptthread dazu animiert wird zu aktualisieren, so tut er das sofort. Code wie folgt:
Delphi-Quellcode:
procedure tliste.execute;
var error_msg :
string;
t : integer;
begin
stern_an := true;
exec := false;
repeat
begin
try
zeige_alle_listen;
t := gettickcount;
while gettickcount - t < 1000
do
begin
Sleep(10);
if exec
then
begin
zeige_alle_listen;
exec := false
end
end;
stern_an :=
not (stern_an)
except on e:
exception do
begin
error_msg := '
Fehler beim Aktualisieren der Listen'+CHR(13)+CHR(10)+e.
Message+CHR(13)+CHR(10)+'
Prozedur "tliste.execute" in "uAusgabeliste"';
save_err(error_msg)
end
end;
end
until terminated
end;
Dabei ist die Prozedur "zeige_alle_listen" diejenige, die die Daten aktualisiert. "Exec" ist eine Boolean-Variable des Threads, die vom Hauptthread auf "true" gesetzt wird, damit der Thread "tliste" sofort (d.h. wie ihr erkennen könnt max. 10ms später
) aktualisiert. Gezeichnet wird das StringGrid per OwnerDraw. Funktioniert soweit auch wunderbar und nach außen hin fehlerfrei. Allerdings sehe ich in meiner Datei "errors.log" (So heißt das Log-File für sämtliche "unerwartete" Exceptions) ab und zu die Fehlermeldung "Ein Aufruf einer Betriebssystemfunktion ist fehlgeschlagen".
Ich habe jedoch keine Ahnung, was diese bedeutet bzw. wo sie genau herkommen könnte. Debuggen ist auch schwierig, da die Meldung nur sporadisch auftritt.
Wäre dankbar, wenn mir jmd. helfen könnte oder es zumindest versucht. Wenn nötig, kann ich euch noch die Prozedur, die die Daten aktualisiert und die, die sie zeichnet, posten.
Gruß
Michael