AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi arrays redefinieren während laufender Threads
Thema durchsuchen
Ansicht
Themen-Optionen

arrays redefinieren während laufender Threads

Ein Thema von messie · begonnen am 14. Sep 2005 · letzter Beitrag vom 14. Sep 2005
 
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#6

Re: arrays redefinieren während laufender Threads

  Alt 14. Sep 2005, 12:54
Zitat von shmia:
Du darfst die offenen Arrays nach Start der Threads nicht mehr resizen.
Das würde mich aber hart treffen.
Ich habe mal ein kleines Beispiel gebaut, wie ich das abwickeln wollte. Lief jetzt eineinhalb Stunden ohne Probleme.
Delphi-Quellcode:
type
  TT = class(TThread)
    procedure execute;override;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Timer1: TTimer;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    procedure writedisplay;
    procedure initarray;
  end;

var
  Form1: TForm1;
  array1 : array of integer;
  Mutex : THandle;
  T : TT;

implementation

{$R *.dfm}

procedure TT.execute;
begin
  priority := tplower;
  application.ProcessMessages;
  while not terminated do
  begin
    try
    if WaitForSingleObject(Mutex,INFINITE) = WAIT_OBJECT_0 then
      synchronize(Form1.writedisplay);
    finally
      ReleaseMutex(Mutex);
    end;
    sleep(100);
  end;
end;

procedure TForm1.initarray;
var
  i : integer;
begin
  randomize;
  setlength(array1,0);
  setlength(array1,random(100000));
  Label1.Caption := IntToStr(high(array1)+1);
  for i := 0 to high(array1) do
  begin
    array1[i] := random(100);
  end;
end;

procedure TForm1.writedisplay;
var
  i : integer;
begin
  Memo1.Clear;
  for i := 0 to high(array1) do
  begin
    Memo1.Lines.Add(IntToStr(array1[i]));
    //application.ProcessMessages;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  initarray;
  if timer1.Enabled then
  begin
    timer1.Enabled := false;
    T.Terminate;
  end
  else
  begin
    timer1.Enabled := true;
    T := TT.Create(false);
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  try
    if WaitForSingleObject(Mutex,INFINITE) = WAIT_OBJECT_0 then
    begin
      initarray;
    end;
  finally
    ReleaseMutex(Mutex);
  end;
end;

initialization
  Mutex := CreateMutex(nil,false,nil);

finalization
  Mutex := CreateMutex(nil,false,nil);
Ist das so tatsächlich nicht zulässig?

Grüße, Messie
  Mit Zitat antworten Zitat
 


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 04:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz