C语言 在Windows上 怎么关闭一个正在运行的线程,这个线程每工作一次,就会sleep 10 秒,要求在关闭时,如果在工作则要等待工作完才进行关闭线程 请用Windows 的 API 来写一个
时间: 2024-01-21 08:18:21 浏览: 51
在Windows API 中,可以使用 `CreateThread()` 来创建线程,使用 `ExitThread()` 来结束线程。但是,如果要等待线程运行完毕再结束线程,可以使用 `WaitForSingleObject()` 函数来等待线程结束。
下面是一个示例代码,可以创建一个线程并且在需要时关闭它:
```c
#include <windows.h>
#include <stdio.h>
DWORD WINAPI ThreadFunc(LPVOID lpParam)
{
int i = 0;
while (true) {
printf("Thread running %d\n", i++);
Sleep(10000);
}
return 0;
}
int main()
{
DWORD dwThreadId;
HANDLE hThread;
hThread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, &dwThreadId);
if (hThread == NULL) {
printf("CreateThread failed (%d)\n", GetLastError());
return 1;
}
// 等待用户输入来停止线程
getchar();
// 结束线程
if (WaitForSingleObject(hThread, INFINITE) == WAIT_OBJECT_0) {
printf("Thread has ended\n");
CloseHandle(hThread);
} else {
printf("WaitForSingleObject failed (%d)\n", GetLastError());
}
return 0;
}
```
在这个示例中,`CreateThread()` 函数创建了一个新的线程,并且在该线程中执行 `ThreadFunc()` 函数。该函数会不断地输出计数器 `i` 的值,并且每次输出后会休眠 10 秒。
在 `main()` 函数中,我们先等待用户输入字符,然后调用 `WaitForSingleObject()` 函数来等待线程结束。如果该函数返回 `WAIT_OBJECT_0`,则表示线程已经结束,可以使用 `CloseHandle()` 函数来关闭线程句柄。否则,该函数返回错误代码。
阅读全文