[gelöst] Thread Constructor Dialog aufrufbar?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

[gelöst] Thread Constructor Dialog aufrufbar?

Beitrag von Michl »

Hallo,

bei einer Komponente starte ich ein externes Programm mittels eines Threads. Wird das externe Programm nicht gefunden, möchte ich dieses gern per OpenDialog öffnen/suchen. Funktioniert alles bestens. Allerdings frage ich mich, ob das platformübergreifend funktioniert oder nur unter Windows?!

Kann jemand mir sagen, ob dies auch unter Linux funktioniert?

Ein einfacher Test (per QuestionDialog):

Code: Alles auswählen

procedure TMyThread.Question;
begin
  if QuestionDLG('Test sync', 'Darf man das?', mtConfirmation, [mrYes, 'Ja', mrNo, 'Nein'], 0) <> mrYes then
  raise Exception.Create('Darf man nicht');
end;
 
constructor TMyThread.Create;
begin
  inherited Create(False);
  FreeOnTerminate := True;
  Synchronize(@Question);
 
  if QuestionDLG('Test direkt', 'Darf man das?', mtConfirmation, [mrYes, 'Ja', mrNo, 'Nein'], 0) <> mrYes then
  raise Exception.Create('Darf man nicht');
end; 
Bsp. anbei
Dateianhänge
TestDialogAndThread.zip
(1.9 KiB) 48-mal heruntergeladen
Zuletzt geändert von Michl am Do 15. Okt 2015, 10:28, insgesamt 1-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: Thread Constructor Dialog aufrufbar?

Beitrag von theo »

Funktionieren tut's. Die Version mit "sync" ist wahrscheinlich korrekt, die andere könnte zu Komplikationen führen.

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Thread Constructor Dialog aufrufbar?

Beitrag von Michl »

Tiptop! Dann lasse ich das so, sonst hätte ich wahrscheinlich ein Event gefeuert und im Mainthread darauf gehorcht - ist aber umständlicher.

Danke!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: [gelöst] Thread Constructor Dialog aufrufbar?

Beitrag von theo »

Wenn du den Quellcode der Anwendung zur Kompilierung unter Linux weitergibst, dann achte darauf, dass UseCThreads defniert oder das entsprechende $IFDEF in der .lpr entfernt wurde.
Also z.B.:

Code: Alles auswählen

program Project1;
 
{$mode objfpc}{$H+}
 
uses       
{$IFDEF UNIX}
  cthreads,
  {$ENDIF}
...

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: [gelöst] Thread Constructor Dialog aufrufbar?

Beitrag von Michl »

Ich dachte mit einem neuen Target würden die entsprechenden Compilerschalter (wie UseCThreads) automatisch gesetzt. Danke für den Hinweis! Hoffentlich merke ich mir das für die Zukunft (war, glaube ich, nicht das erste Mal, dass ich diesen Hinweis lese :wink: ).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
theo
Beiträge: 10873
Registriert: Mo 11. Sep 2006, 19:01

Re: [gelöst] Thread Constructor Dialog aufrufbar?

Beitrag von theo »

Nö, wenn UseCThreads unter Linux immer gesetzt werden sollte, bräuchte es ja die Abfrage nicht.
"cthreads" soll eben nicht automatisch geladen werden.

Antworten