トップページ > プログラム > 2014年03月28日 > d6QGntWj

書き込み順位&時間帯一覧

14 位/211 ID中時間01234567891011121314151617181920212223Total
書き込み数0000002300000000000000005



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
くだすれDelphi(超初心者用)その55

書き込みレス一覧

くだすれDelphi(超初心者用)その55
786 :デフォルトの名無しさん[sage]:2014/03/28(金) 06:56:10.22 ID:d6QGntWj
>>785
いやおそらく理解は十分だと思いますよ。
おそらくA3型を前提とした質問だと思うのでそうとして答えますね。
(もしそうでなかったら無視してください)
まず 767 の
TForm1.FormDestroy;
begin
if Assigned(Mythread) then mythread.Free;
end;
というFreeは、「親が子より先には死んではいけない」という親子型の基本理念を実現するものですので
ここでウェイトが生じうることは我慢して下さい。
逆に言えば FreeOnTerminate=true だとその理念が無いために A1型やA2型ではいろいろ苦労されてい
るはずです。
子が親の予想より早く死んでしまったためアクセスバイオレーションとなることは既に書きましたが
親が子の予想より早く死んでしまったためアクセスバイオレーションとなることもあるというわけです。
くだすれDelphi(超初心者用)その55
787 :デフォルトの名無しさん[sage]:2014/03/28(金) 06:58:04.75 ID:d6QGntWj
次に 767 の
TForm1.Timer1Timer;
begin
if Assigned(mythread) and mythread.finished then begin
mythread.Free;
mythread:= nil;
end;
という部分での Free ですがここはmythreadが処理を完了していますので
Freeでウエイトが生じることはないはずです。
くだすれDelphi(超初心者用)その55
788 :デフォルトの名無しさん[sage]:2014/03/28(金) 07:07:12.92 ID:d6QGntWj
最後に 767 の
TForm1.Button1click;
begin
if Assigned(mythread) then mythread.Free;
mythread:= TMyThread.create;
end;
という部分でのウェイトですがここはサブスレッドを1つだけに制限しているため
Freeして使いまわしているだけです。複数のサブスレッドを作るようにすればここでのFreeは不要です。
例えば、HTTPサーバーでリッスンするスレッドに接続要求があった時は接続可能な数まで
サブスレッドを作成するだけでいちいちFreeはしないと思います。
くだすれDelphi(超初心者用)その55
789 :デフォルトの名無しさん[sage]:2014/03/28(金) 07:13:34.20 ID:d6QGntWj
>>784
「別のスレットがmythreadを使う」というプログラムがよくわからないので
具体例を示していただけると幸いです。
FreeOnTerminate=trueだとそういうプログラムでも問題が生じないという
ところまで示していただけると多分今後スムーズに話が進みます。
くだすれDelphi(超初心者用)その55
790 :デフォルトの名無しさん[sage]:2014/03/28(金) 07:24:05.61 ID:d6QGntWj
>>784
なお、「別のスレットがmythreadを使う」がもし「子スレッドが複数いて子同士での通信」を意味するなら
mythreadを使うのではなくsyncronizeや同期オブジェクトやスレッド間通信を使ったほうがよいと思います。
それはFreeOnTerminate=trueでも同じのはずです。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。