C言語のcreatethread関数の使い方は?
CreateThread関数は、Windowsオペレーティングシステムで提供され、C言語で使用されるスレッドを作成するための関数です。
以下の形式の関数です。
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
パラメータの説明:
- lpThreadAttributes:スレッドオブジェクトのセキュリティ属性。既定値は NULL です。
- dwStackSize:スレッドのスタックサイズです。 デフォルトは0で、これはデフォルトサイズを使用することを意味します。
- lpStartAddress:スレッドの開始アドレス、つまりスレッド関数のアドレス。
- lpParameter は、スレッド関数に渡されるパラメーターです。
- dwCreationFlags:スレッドの作成フラグ。スレッドをすぐに実行するか、作成時に休止状態にするかなどが指定されます。
- lpThreadId: 受信スレッド識別子を指す変数。
CreateThread関数は、スレッドのハンドル(HANDLE型)を返し、このハンドルを使用してスレッドを操作できます。
CreateThread 関数を使用したスレッドの作成の基本的な手順は次のとおりです。
- スレッドが実行するタスク、スレッド関数を定義します。
- CreateThread 関数を使用してスレッドを作成します。
- スレッドハンドルを利用することで、スレッドの操作(スレッド終了待ち、スレッドの強制終了など)を行う。
- スレッドリソースの解放
サンプルコード:
#include <stdio.h>
#include <windows.h>
DWORD WINAPI threadFunc(LPVOID lpParam) {
printf("Hello from thread!\n");
return 0;
}
int main() {
HANDLE hThread;
DWORD threadId;
hThread = CreateThread(NULL, 0, threadFunc, NULL, 0, &threadId);
if (hThread == NULL) {
printf("Failed to create thread.\n");
return 1;
}
printf("Thread created with ID: %d\n", threadId);
// ... 其他操作
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
return 0;
}
上記のコード例では、CreateThread関数がスレッドの作成に用いられ、WaitForSingleObject関数がスレッドの終了を待つために使用されます。