Einzelnen Beitrag anzeigen

Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.060 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

Re: Einfacher thread der nur ein MessageDlg anzeigt erzeugen

  Alt 4. Jan 2009, 16:03
Zitat von Die Muhkuh:
Nimm eine MessageBox, die ist threadsafe.
Hallo,

ich habe jetz eine entdeckung gemacht.
Zum testen werden zwei threads hintereinander erzeugt und ausgeführt.
Wenn ich Procedure StarteThread ShowMessage verwende, werde sofort zwei Fenster mit
der Nachricht erzeugt. Verwende ich jedoch MessageBox, wird die erte Nachticht erzeugt
und sobald ich sie bestätigt habe wird die zweite angezeigt. Ich habe das Fenster
verschoben es ist also nicht direkt hinterhalb. Als ob der erste Thread warten würde
bis der vorherige fertig ist. Kann man das irgendwie erkleren?

Dass zweite was micht interessieren würde ist, ob es Möglich ist den PChar Buffer
für die MesageBox mit dynamischer Länge anzulegen.
Buffer: array [0..MAX_BUFFER] of char;

so geht es nicht:
Buffer: array of char;
SetLength(Buffer,Length(MeinString));




Delphi-Quellcode:
      ThreadMB := TMessageBoxThread.Create(s);
      ThreadMB.Priority := tpLower;
      ThreadMB.Resume;

      ThreadMB := TMessageBoxThread.Create(s);
      ThreadMB.Priority := tpLower;
      ThreadMB.Resume;
Delphi-Quellcode:
unit MessageBoxThread;

interface

uses
  Classes, Dialogs, Forms, Sysutils, Windows;

type
  TMessageBoxThread = class(TThread)
  private
    { Private-Deklarationen }
  protected
    text: string;
    procedure Execute; override;
    procedure StarteThread; virtual; //abstract;
  public
    constructor Create(msg:string);
  end;


implementation

{ TMessageBoxThread }

constructor TMessageBoxThread.Create(msg:String);
begin
  inherited Create(false);
  text := msg;
end;


procedure TMessageBoxThread.Execute;
begin
  Synchronize(StarteThread);
end;

procedure TMessageBoxThread.StarteThread;
const MAX_BUFFER = 500;
var Buffer: array [0..MAX_BUFFER] of char;

begin
  ShowMessage(text);
// StrLCopy(Buffer, PChar(text), MAX_BUFFER);
// Application.MessageBox(Buffer, 'Fingerabdruck gefunden', MB_OK);
end;

end.
Gruß Kostas
  Mit Zitat antworten Zitat