※ ChatGPTを利用し、要約された質問です(原文:スレッドの廃棄について)
スレッドの廃棄について
このQ&Aのポイント
スレッドの生成方法として、ボタンのクリックイベントプロシージャ内でCreateThreadを使用しているが、これでは新しいスレッドが生成されるたびに収拾がつかなくなる可能性がある。
一つのスレッドのみを存在させたい場合、スレッドの存在を調べて廃棄し、新しいスレッドを生成する方法が必要。
ActiveBasicを使用しているが、CやVBでも同じ方法が適用できる。
ウインドウ上のボタンを押すとあるスレッドがスタートするような
プログラムがあるとします。
ボタンのクリックイベントプロシージャ内で
以下のように書いてスレッドをスタートさせることにしたのですが、
Sub MainWnd_CommandButton1_Click()
'スレッドのスタート
hThread1=CreateThread(ByVal 0,0,AddressOf(MainOperation),0,0,VarPtr(thread1_ID))
End Sub
このままではボタンがクリックされるたびに次々新しくスレッドが
生成されてしまい収拾がつかなくなるのでは?と思います。
基本的に一つのスレッドのみを存在させたいので、
CreateThreadの直前に「CloseHandle(hThread1)」と書こうかとも
思ったのですが、仮にスレッドが存在して無い場合、その場合は
無効なハンドルをクローズすることになりそうで何だか不都合が
ありそうです。
スレッドの存在を調べて、あれば安全に廃棄して新しいものをスタート
させる、といったことはどのように実装するべきでしょうか?
ActiveBasicを使っていますが、教えて頂く際には
CやVBでも構いません。
お礼
回答ありがとうございます。 なるほど、カウンタをこちらで用意してやるんですか。 これだと複数のスレッドを生成したいときでも対応出来ますね。 "作ってから破棄するのではなく、作らないようにすれば良い。" そうですね。その方針で書きたいと思います。 ありがとうございました。またよろしくお願いします。