電話:
TMemo* MemoChat = // You defined that somewhere I assume
HANDLE hNetThread = CreateThread(NULL, 0, NetThread, MemoChat, 0, &dwNetThreadId);
ここで起こっていることは、3 番目のパラメーターとして渡すポインターは、void ポインター (または WinTerms LPVOID) に自動変換されるということです。システムはあなたのオブジェクトについて何も知らないので、型情報を失うだけです。
新しいスレッド開始点:
DWORD NetThread(LPVOID lpParameter)
{
TMemo* MemoChat = reinterpret_cast<TMemo*>(lpParameter);
// Do your thread stuff here.
}
スレッド開始メソッドが呼び出されたら。void ポインターを正しい型に変換するだけで、再び使用できるようになります。
他の誤解を解くためだけに。
HANDLE はポインターです。
そして、それをパラメーターとして NetThread() に渡すこともできました。
HANDLE は、使用しているオブジェクトを指すシステム制御下のポインターへのポインターです。では、なぜ二重間接化なのか。これにより、システムは、オブジェクトのすべての所有者を見つけることなく、オブジェクトを移動 (およびそのポインターを更新) できます。所有者はすべて、更新されたばかりのポインターを指すハンドルを持っています。
これは、OS/ハードウェアがメイン メモリをセカンダリ ストレージにスワップできるため、最近のコンピュータではめったに使用されない、昔ながらのコンピュータ サイエンスの概念です。しかし、特定のリソースについては、それらはまだ役に立ちます。現在、ハンドルが必要な場合、ハンドルはユーザーから離れたオブジェクト内に隠されています。