Мой класс унаследован от TThread с несколькими свойствами, одним из которых является TAdoDataSet. Мой поток создает свой собственный TAdoConnection и TAdoDataSet. Мои вопросы:
1- безопасно ли использовать DataSet (MyThread.dataset) в главном потоке ПОСЛЕ прекращения MyThread?
2 - есть ли лучший метод для реализации этого требования? Я имею в виду создание потока, который открывает набор данных, а затем использует набор данных в основном потоке? Функция CAllBack или PostMessage?
TmyProc =Procedure (Msg:TmyMsg) of object;
TmyThread = Class(TThread)
private
FConnection: TAdoConnection;
FMyDataset :TAdoDataSet;
FmyProc: TMyProc;
protected
procedure Execute; override;
property myProc: TmyProc read FmyProc;
public
Constructor Create(myProc:TmyProc;
ConnectionString: WideString);
property MyDataSet: TAdoDataSet read FMyDataset
end;
constructor TmyThread .Create(Susp:Boolean; myProc:TmyProc;
ConnectionString: WideString);
begin
// here I create the connection and mydataset;
// and my callback comes from main thread;
FmyProc := myProc;
inherited Create(Susp);
end;
procedure TmyThread.Execute;
begin
inherited;
CoInitialize(nil);
// here I open the connection and myDataset
CoUninitialize();
end;
In the main thread :
procedure TForm1.Button1Click(Sender: TObject);
begin
mt:=TmyThread.Create(True,ACallBack,ADOConnection1.ConnectionString);
mt.FreeOnTerminate := True;
mt.OnTerminate:= OnThredDone;
mt.Resume;
end;
3 - Как вы видите в коде выше, freeonterminate: = True, но MyThread остается в живых, когда я тестирую его, используя: if Assigned (MyThread).