「マルチスレッド」の編集履歴(バックアップ)一覧に戻る

マルチスレッド - (2010/03/02 (火) 22:34:35) の編集履歴(バックアップ)


スレッドの基本

スレッドの生成はCreateThread関数で行う。
スレッドは引数を1つだけもつ関数にする。 名前は何でもいい。
スレッドは戻り値を持っていて、GetExitCodeThreadで調べることができる。
スレッドの終を待つにはWaitFor〇〇関数を使うと良いかも。

#N88BASIC
Dim hT As HANDLE
Dim id As DWord

hT = CreateThread(ByVal 0, 0, AddressOf(t), 5, 0, Varptr(id))
WaitForSingleObject(hT, INFINITE)
CloseHandle(hT)
Print "スレッドは正しく終了しました"

Function t(a As DWordPtr) As Long
Print a
End Function
このようにサブスレッドを作るのは簡単なんだけど、スレッド間の同期や、終了にかかあるタイミングがおかしいと、不具合のもとになる。
マルチスッドレは速くならない。速くなるケースは、マルチコアCPUで、かつスレッドの実際の処理がスレッドの生成や同期にかかるコストより大きくないといけない。
ウインドウプロシージャのような、場合、長大な処理をウインドウプロシージャでやると、フリーズするので、マルチスレッドにすることで、処理がすぐにカエルので、フリーズ対策になる。

クリティカルセクション


セマフォ


イベント