- Код: Выделить всё
- unit main;
 {$ifdef FPC}{$mode objfpc}{$h+}{$endif}
 interface
 uses
 mseglob,mseguiglob,mseguiintf,mseapplication,msestat,msemenus,msegui,
 msegraphics,msegraphutils,mseevent,mseclasses,mseforms,classes,sysutils,
 msesimplewidgets,msewidgets;
 type
 tmainfo = class(tmainform)
 tbutton1: tbutton;
 procedure OnTreadTerminate(Sender: TObject);
 procedure _on_run(const sender: TObject);
 end;
 
 TTestThread = class(Tthread)
 protected
 procedure Execute; override;
 public
 end;
 
 var
 mainfo: tmainfo;
 t1,t2,t3:TTestThread;
 implementation
 uses
 main_mfm;
 
 procedure tmainfo.OnTreadTerminate(Sender: TObject);
 var
 y:TThreadID;
 begin
 if Sender is TTestThread then
 begin
 y:=TTestThread(Sender).Handle;
 if y=t1.handle then begin showmessage('t1'+' (handle='+inttostr(y)+')') end;
 if y=t2.handle then begin showmessage('t2'+' (handle='+inttostr(y)+')') end;
 if y=t3.handle then begin showmessage('t3'+' (handle='+inttostr(y)+')') end;
 end;
 end;
 procedure test();
 begin
 T1:=TTestThread.Create(True);
 T2:=TTestThread.Create(True);
 T3:=TTestThread.Create(True);
 T1.Onterminate:=@mainfo.OnTreadTerminate;
 T2.Onterminate:=@mainfo.OnTreadTerminate;
 T3.Onterminate:=@mainfo.OnTreadTerminate;
 T1.Resume;
 T2.Resume;
 T3.Resume;
 end;
 procedure tmainfo._on_run(const sender: TObject);
 begin
 test;
 end;
 procedure TTestThread.Execute;
 begin
 sleep(50*round(random(2))+50);
 end;
 
 end.
1)Интересует вопрос не получу ли я AV и прочие "радости" при одновременном доступе нескольких потоков к процедуре OnTreadTerminate ?
2)OnTreadTerminate выполняется в главном потоке , как и в delhpi ?
3)Thread.Handle и Thread.ThreadID в чем разница ?
4) WRITE_DEBUG попадает в конечный релиз (сборка без отладочной информации)?
Добавлено спустя 9 часов 55 минут 12 секунд:
По поводу 1) Жизнь и смерть в режиме run-timehttp://www.delphikingdom.com/asp/viewitem.asp?catalogid=342, но там кнопки у меня потоки






