AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi WaitForMultipleObjects und offene Arrays
Thema durchsuchen
Ansicht
Themen-Optionen

WaitForMultipleObjects und offene Arrays

Ein Thema von elliott · begonnen am 3. Apr 2006 · letzter Beitrag vom 3. Apr 2006
Antwort Antwort
elliott

Registriert seit: 3. Apr 2006
17 Beiträge
 
Delphi 2005 Personal
 
#1

WaitForMultipleObjects und offene Arrays

  Alt 3. Apr 2006, 15:08
Hallo!
Ich habe folgendes Problem:
Wenn ich WaitForMultipleObjects mit einem offenen Array fütter, dann endet das immer mit einem Fehler.
Weiss jemand zufällig ob man dort nur normale Arrays benutzen kann?
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#2

Re: WaitForMultipleObjects und offene Arrays

  Alt 3. Apr 2006, 15:24
zeig mal dein jetztiger Aufruf (Code)... ich habe einen Verdacht, wäre aber ohne weitere Informationen ein Raten...
grundsätzlich kann man beide Array-Arten für WaitForMultipleObjects verwenden (mit dem richtigen Aufruf)...
  Mit Zitat antworten Zitat
elliott

Registriert seit: 3. Apr 2006
17 Beiträge
 
Delphi 2005 Personal
 
#3

Beispiel

  Alt 3. Apr 2006, 15:56
zum Beispiel so:

Delphi-Quellcode:
var
  ThreadHandleListe: array of tHandle;
  WaitErgebnis: cardinal;
...
  WaitErgebnis:= WaitForMultipleObjects( length(ThreadHandleListe), @ThreadHandleListe, true, 0 );
Das WaitErgebnis ist irgendwie immer $FFFFFFFF, ob die Threads nun noch laufen oder nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#4

Re: WaitForMultipleObjects und offene Arrays

  Alt 3. Apr 2006, 15:57
Hi,

bin mir nicht ganz sicher, aber versuche mal High statt Length.
  Mit Zitat antworten Zitat
elliott

Registriert seit: 3. Apr 2006
17 Beiträge
 
Delphi 2005 Personal
 
#5

komplettes Beispiel

  Alt 3. Apr 2006, 17:11
Hier ein komplettes Beispiel.
Je nachdem ob mit einem offenen oder normalen Array probiert werden soll muss man nur die Klammern vor dem Beispiel setzen...

Delphi-Quellcode:
procedure testWFMO;
var
{  ThreadHandleListe: array of tHandle; {Beispiel 1}
  ThreadHandleListe: array[0..4] of tHandle; {Beispiel 2}
  WaitErgebnis: cardinal;
  cZaehler: cardinal;
begin
{  SetLength( ThreadHandleListe, 5 ); {Beispiel 1}
  for cZaehler:= 1 to length(ThreadHandleListe) do
    ThreadHandleListe[cZaehler -1]:= CreateEvent( nil,true, true, nil );
  WaitErgebnis:= WaitForMultipleObjects( length(ThreadHandleListe), @ThreadHandleListe, true, 0 );
writeln( WaitErgebnis );
  for cZaehler:= 1 to length(ThreadHandleListe) do
    CloseHandle( ThreadHandleListe[cZaehler -1] );
{  SetLength( ThreadHandleListe, 0 ); {Beispiel 1}
end;
So läuft {Beispiel 2} und das Ergebnis ergibt 0.
Wenn man vor {Beispiel 2} vorn noch eine Klmmer setzt und die anderen vorn entfernt, hat men {Beispiel 1}, welches $FFFFFFFF ergibt...

Dabei ist es nicht relevant ob man high oder length benutzt...
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#6

Re: WaitForMultipleObjects und offene Arrays

  Alt 3. Apr 2006, 17:58
bei dynamischen Arrays braucht es noch das [0], ansonsten übergibtst du der API einen Pointer auf einen Pointer auf die Handles (einmal Pointer zuviel).... (Verdacht bestätigt )
Code:
WaitErgebnis:= WaitForMultipleObjects( length(ThreadHandleListe),@ThreadHandleListe[color=#ff003f][0][/color],true,0);
  Mit Zitat antworten Zitat
elliott

Registriert seit: 3. Apr 2006
17 Beiträge
 
Delphi 2005 Personal
 
#7

Re: WaitForMultipleObjects und offene Arrays

  Alt 3. Apr 2006, 18:07
Danke!
Jetzt funktioniert es!
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: WaitForMultipleObjects und offene Arrays

  Alt 3. Apr 2006, 19:13
Und es sollte length()-1 heißen. Das Eloement length() gibt es nämlich nicht, da dynamische Array null-basierend sind.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#9

Re: WaitForMultipleObjects und offene Arrays

  Alt 3. Apr 2006, 19:16
Zitat von Luckie:
Und es sollte length()-1 heißen. Das Eloement length() gibt es nämlich nicht, da dynamische Array null-basierend sind.
nein, das ist absolut korrekt so !
das API erwartet die ANZAHL der Handles, nicht den höchsten Index....
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: WaitForMultipleObjects und offene Arrays

  Alt 3. Apr 2006, 19:30
Ups. Mein Fehler.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:01 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