输入1之后程序一直循环输出
时间: 2024-02-11 21:08:14 浏览: 29
这是因为在程序结束之前,子线程一直在循环输出,而主线程并没有等待子线程执行完成就直接退出了,导致子线程无法正常退出。
为了解决这个问题,可以在程序退出之前,先向子线程发送终止信号,并等待子线程正常退出。修改代码如下:
```
#include <windows.h>
#include <iostream>
using namespace std;
volatile bool g_bTerminate = false;
DWORD WINAPI FunOne(LPVOID param) {
while (!g_bTerminate) {
Sleep(1000);
cout << "hello! ";
}
return 0;
}
DWORD WINAPI FunTwo(LPVOID param) {
while (!g_bTerminate) {
Sleep(1000);
cout << "world! ";
}
return 0;
}
int main(int argc, char* argv[]) {
int input = 0;
HANDLE hand1 = CreateThread(NULL, 0, FunOne, (void*)&input, CREATE_SUSPENDED, NULL);
HANDLE hand2 = CreateThread(NULL, 0, FunTwo, (void*)&input, CREATE_SUSPENDED, NULL);
while (true) {
cin >> input;
if (input == 1) {
ResumeThread(hand1);
ResumeThread(hand2);
}
else {
SuspendThread(hand1);
SuspendThread(hand2);
}
};
g_bTerminate = true;
WaitForSingleObject(hand1, INFINITE);
WaitForSingleObject(hand2, INFINITE);
CloseHandle(hand1);
CloseHandle(hand2);
return 0;
}
```
在修改后的代码中,我们使用了一个全局变量 `g_bTerminate` 来表示线程是否应该终止。当用户输入 1 时,程序会恢复线程的执行;当用户输入其他值时,程序会挂起线程的执行。在程序退出时,我们先向子线程发送终止信号,然后等待子线程正常退出,并释放相关资源。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)