Einzelnen Beitrag anzeigen

MStoll

Registriert seit: 15. Nov 2005
131 Beiträge
 
Turbo Delphi für Win32
 
#1

"Ein Aufruf einer Betriebssystemfunktion ist fehlgeschl

  Alt 8. Feb 2006, 21:31
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
  Mit Zitat antworten Zitat