TThread.Executeの中で
procedure TThread.Execute;
var
aForm: TForm2;
begin
aForm := TForm2.Create(nil);
aForm.ShowModal;
aForm.Free;
end;
という処理を書いて実行したのですが、TForm2の描画がおかしくなります。
置いてあるはずのボタンが無くなったりします。
出るときもあります。(エラーの時もあります)
恐らく、スレッド内でTFormを作るなというのが正解と思われますが、
メインループから独立したフォームを作る事はできないものでしょうか。
開発環境はWinXP,Del6,Pen4×1のHyperTherdingです。
>恐らく、スレッド内でTFormを作るなというのが正解と思われますが、
VCLはマルチスレッドに対応していないので、必ずTThread.Synchronizeを
使用してメインスレッドに作らせる必要があります。
かみづ さん
ご解答ありがとうございます。
> VCLはマルチスレッドに対応していないので
ですよねぇやはり。
TFromを使用しないと色々面倒なので困っています。
独自にごりごり書くしかないですね。
> 独自にごりごり書くしかないですね。
TForm を使用しないで、CreateWindow() で作ってもワーカスレッド内で
メッセージループを回さないと GUI は動作しません。ですから、あまり
意味はないかと。GUI はメインスレッドで作って動作させるのが正解です。
えーとさん
ご指摘ありがとうございます。
そうなんです、それが面倒なんです!
VCLがマルチスレッド対応しないかぎり(しないだろう)
プリミティブなコードを書かなければならないんです。
Delphi使う意味がないです。
結局天秤にかけて、メインスレッド一本で行くことにしました。
ツイート | ![]() |