Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Parameterübergabe an Thread (https://www.delphipraxis.net/106937-parameteruebergabe-thread.html)

rawsoul 19. Jan 2008 00:22


Parameterübergabe an Thread
 
Moin moin (?) zusammen,

ich möchte in einem Thread das Sortieren eines Arrays auslagern. Der Kopf sieht so aus:
Delphi-Quellcode:
procedure bubblesort(var a:array of integer);stdcall;
var
  i,j,tmp:integer;
begin
  for i := high(a) downto low(a)+1 do
    for j := low(a) to i-1 do
      if a[j]<a[j+1] then
      begin
        tmp:=a[j];
        a[j]:=a[j+1];
        a[j+1]:=tmp;
      end;
end;
Der Thread wird so erstellt (a1 ist hier ein Array of Integer):
Delphi-Quellcode:
createthread(nil,0,@bubblesort,a1,0,threadid)
Der Thread wird sofort nach dem erstellen wieder beendet, ohne Fehlermeldung allerdings. Das sortieren eines Arrays mit 65.000 Elementen mit Bubblesort geht mit sicherheit nicht in einem Augenblick. An dem Array a1 hat sich auch nichts getan. Was mache ich denn hier falsch?

Gruß,
Frank.

Muetze1 19. Jan 2008 01:05

Re: Parameterübergabe an Thread
 
Das kann ein Speichermanagerproblem sein. Von daher nutze lieber BeginThread() und EndThread(). Damit wird auch die MultiThread-Kompatibilität beim Speichermanager gewährleistet.

rawsoul 19. Jan 2008 12:05

Re: Parameterübergabe an Thread
 
Durch BeginThread bekomme ich nun einen EOS Error mit Code 5 'Zugriff Verweigert'. Nebenbei habe ich das Array im Primärthread gelesen, AFAIR ist das nicht möglich. Wie kann ich dies denn nun bewerkstelligen?

Luckie 19. Jan 2008 13:02

Re: Parameterübergabe an Thread
 
Zitat:

Zitat von rawsoul
Durch BeginThread bekomme ich nun einen EOS Error mit Code 5 'Zugriff Verweigert'.

Dann solltest du diesen Fehler suchen und beheben. Wie schon gesagt wurde, der Wrapper BeginThread macht den Heap threadsafe, in dem er die globale Variable IsMultithreaded setzt.

Neutral General 19. Jan 2008 13:24

Re: Parameterübergabe an Thread
 
Zitat:

Zitat von rawsoul
Durch BeginThread bekomme ich nun einen EOS Error mit Code 5 'Zugriff Verweigert'. Nebenbei habe ich das Array im Primärthread gelesen, AFAIR ist das nicht möglich. Wie kann ich dies denn nun bewerkstelligen?

Wenn du BeginThread benutzt musst du das stdcall; weglassen ;)

Gruß
Neutral General

semo 19. Jan 2008 17:30

Re: Parameterübergabe an Thread
 
noch ein kleiner hnweis auf die von borland mitgelieferten demos,
die man unter C:\Programme\Borland\Delphi7\Demos findet.

C:\Programme\Borland\Delphi7\Demos\Threads --> dürfte hilfreich sein


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