Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fehlermeldung bei Delay (https://www.delphipraxis.net/168571-fehlermeldung-bei-delay.html)

gargano 29. Mai 2012 11:02

Fehlermeldung bei Delay
 
Hi Leute,
ich verwende für das Delay folgenden Code

Delphi-Quellcode:
procedure TGenericComDeviceDataModule.Delay(Milliseconds: Integer);
var
  Tick: DWORD;
  Event: THandle;
begin
{$R-}
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickCount + DWORD(Milliseconds);
    while (Milliseconds > 0) and
      (MsgWaitForMultipleObjects(1, Event, False, Milliseconds,
      QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      Milliseconds := Tick - GetTickCount;
    end;
  finally
    CloseHandle(Event);
  end;
  {$R+}
end;
Manchmal bekomme ich jedoch eine Exception bei Application.ProcessMessages
in der User32.dll DispatchMessageA Zugriffsverletzung bei Adresse 000000. Lesen von Adresse 000000.

Hat dies jemand schon mal gehabt, oder was könnte das sein ?

Gruß
Gargano

mkinzler 29. Mai 2012 11:08

AW: Fehlermeldung bei Delay
 
Ein Nullzeiger deutet auf ein nicht initialisiertes Objekt hin.

gargano 29. Mai 2012 12:18

AW: Fehlermeldung bei Delay
 
Ja, schon.

Aber wie kann das bei einem dispatchmessage passieren ?

Gruß
Gargano

himitsu 29. Mai 2012 12:41

AW: Fehlermeldung bei Delay
 
Dieses Delay wird auch ausschließlich im Hauptthread verwendet?

gargano 29. Mai 2012 12:57

AW: Fehlermeldung bei Delay
 
Nein, sondern in mehreren TDatamodulen, die dynamisch erzeugt werden.
Jedes TDataModule hat da dann sein eigenes Delay.

Gruß
Gargano

hathor 29. Mai 2012 13:07

AW: Fehlermeldung bei Delay
 
Wenn es nur um ein paar Millisekunden geht, ist Application.ProcessMessages; völlig überflüssig und verfälscht die gewünschte Verzögerung.
Theorie:
Während Application.ProcessMessages; ausgeführt wird und die while-Schleife inzwischen beendet worden ist, führt die Rücksprungadresse ins Leere.

gargano 29. Mai 2012 13:14

AW: Fehlermeldung bei Delay
 
Es sind einige TDatamodule die erzeugt werden und dann eigenständig
Geräte steuern mittels Threads.
Der Fehler tritt aber nur bei der Initialisierung am Anfang auf.
Der Zeitbereich ist von 100..1000 ms.

Gruß
Gargano

himitsu 29. Mai 2012 13:17

AW: Fehlermeldung bei Delay
 
Wenn mehrere Delay nebeneinander laufen, dazu eventuell noch ein paar timer und schon läuft eine Menge Code ganz schnell mal quasi parallel (im selben Thread).
Etwas/Mehreres wurde durch das/die Delay unterbrochen und zwischendrin läuft was Anderes.

Eventuell hast du ja dadurch ein paar Probleme, wie z.b. wenn eine Komponente freigegeben wird, wärend irgendwo ein Delay wartet und wenn das dann weiterareitet, dann fehlt diese dort urplötzlich.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:18 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