スレッドについて検索したら、Better Threads For The VCL
http://www.midnightbeach.com/jon/pubs/MsgWaits/MsgWaits.html
というページを見つけたのですが、分からないことがあったので質問します。
(誤: NULL を 0 に直す)
1: なぜ、Spawn Wait ボタンを押すと、Thread Error: ハンドルが無効です。
と、エラーになり、Spawn MsgWait ボタンだとならないのか?
WaitForSingleObjectd は、ウィンドウメッセージをすべて無視してしまうので、
実行中は無反応になるのは理解できるのですが、
スレッドが終了後になぜエラーになるのでしょうか?
2: procedure TPascalTest.Beep / Pause を ShowMessage('Test') に変えると、
Project MsgWaits.exe raised exception class EInvalidOperation with message 'Canvas does not allow drawing'.
Exception EOSError in module MsgWaits.exe at 0000CF6E. ウィンドウ ハンドルが無効です。.
などと、例外が発生するのか?
以上、よろしくお願いします。
1: についてですが、
FreeOnTerminate := True;
をコメントアウトすればエラーになりませんでした。
解放済みのスレッドハンドルを使おうとした(どこで?)ので
エラーになったのだと思います。
ツイート | ![]() |