CreateThread SIGSEGV

Antworten
Joshi
Beiträge: 3
Registriert: Do 21. Apr 2011, 19:33

CreateThread SIGSEGV

Beitrag von Joshi »

Hallo @All,

ich programmiere seit 10 Jahren mit Delphi.
Nun muß ich was mit 64-bit schreiben und nutze Lazarus.

Jetzt zum eigentlichen Problem.
Der folgende Code produziert einen SIGSEGV
bei mehrmaligen klick auf den Button.

In Delphi gab es damit noch nie Probleme.
FPC scheint wohl das noch nicht zu können?

Code: Alles auswählen

function Thread(Param: Pointer): DWord; stdcall;
var
  EventName: string;
begin
  Result := 0;
  EventName := 'blablabla';
  Sleep(1000);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  TID: DWord;
begin
  CreateThread(nil, 0, @Thread, nil, 0, TID);
end;


MfG
Joshi

Joshi
Beiträge: 3
Registriert: Do 21. Apr 2011, 19:33

Re: CreateThread SIGSEGV

Beitrag von Joshi »

Ok, hab's jetzt gefunden.
Liegt wirklich an FPC.
Statt CreateThread muß man BeginThread verwenden, dann klappt's.

Bye, bye.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: CreateThread SIGSEGV

Beitrag von Christian »

Die TThread klasse macht das dann sogar Plattformunabhängig und du musst dir um sowas keine Gedanken mehr machen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Joshi
Beiträge: 3
Registriert: Do 21. Apr 2011, 19:33

Re: CreateThread SIGSEGV

Beitrag von Joshi »

Die TThread benutze ich schon lange nicht mehr, weil die in Delphi eine Nachrichtenschleife zum Synchronisieren benutzt, was in einem Prozess, der keine Nachrichtenschleife besitzt, wie z.B. ein Service, dann nicht funktioniert.

Bin gerade dabei CreateThread in einer FPC-Dll zu testen. Das scheint aber zu funktionieren.

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

Re: CreateThread SIGSEGV

Beitrag von theo »

Joshi hat geschrieben:Die TThread benutze ich schon lange nicht mehr, weil die in Delphi eine Nachrichtenschleife zum Synchronisieren benutzt, was in einem Prozess, der keine Nachrichtenschleife besitzt, wie z.B. ein Service, dann nicht funktioniert.


Ich glaube da bist du falsch informiert. Ich habe schon mehrere Services mit TThread gemacht, die täglich im Einsatz sind.

Antworten