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