Windows创建线程
时间: 2023-12-19 07:52:21 浏览: 130
在 Windows 操作系统中,可以使用以下 API 函数来创建线程:
```c
DWORD WINAPI CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
__drv_aliasesMem LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
```
下面是函数参数的详细说明:
- `lpThreadAttributes`:指向 `SECURITY_ATTRIBUTES` 结构的指针,用于指定新线程的安全描述符。如果该参数为 `NULL`,则新线程默认继承了调用线程的安全描述符。
- `dwStackSize`:指定新线程的堆栈大小。如果为 `0`,则新线程使用与创建线程相同的堆栈大小。
- `lpStartAddress`:指向线程函数的指针。线程函数的返回值必须是 `DWORD` 类型,表示线程的退出代码。
- `lpParameter`:传递给线程函数的参数。
- `dwCreationFlags`:用于指定线程创建时的标志。可以为以下值之一或它们的组合:
- `CREATE_SUSPENDED`:创建线程时,线程的初始状态为挂起状态。
- `0`:创建线程时,线程的初始状态为运行状态。
- `lpThreadId`:指向 `DWORD` 类型的指针,用于接收新线程的标识符。
下面是一个简单的示例:
```c
#include <windows.h>
#include <stdio.h>
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
printf("Hello from thread!\n");
return 0;
}
int main()
{
HANDLE hThread;
DWORD dwThreadId;
hThread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, &dwThreadId);
if (hThread == NULL)
{
fprintf(stderr, "CreateThread failed\n");
return 1;
}
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
return 0;
}
```
在上面的示例中,我们使用 `CreateThread` 函数创建了一个新的线程,并且使用 `WaitForSingleObject` 函数等待该线程执行完毕。最后,我们使用 `CloseHandle` 函数关闭了线程句柄。
阅读全文