AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Einfacher thread der nur ein MessageDlg anzeigt erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

Einfacher thread der nur ein MessageDlg anzeigt erzeugen

Ein Thema von Kostas · begonnen am 3. Jan 2009 · letzter Beitrag vom 4. Jan 2009
Antwort Antwort
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.115 Beiträge
 
Delphi 12 Athens
 
#1

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
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 23:17 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