vs2019 c/c++ 多线程实现一个线程控制另一个线程的启停 CreateThread SuspendThread ResumeThread
// testprocesscontrol.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #define _WINSOCK_DEPRECATED_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #include <iostream> using std::string; #include <winsock2.h>// winsock 2 的头文件和库 #include <MSWSock.h> #include <Windows.h> //#include <psapi.h> #include <direct.h> #include <process.h> #include <iostream> #include <map> #include <list> #include <string> #include <atomic> using namespace std; int flagtest = 0; HANDLE thread1;//全局变量,用于检测 DWORD WINAPI Thread1(LPVOID lpParameter) { while (1) { Sleep(1000); flagtest = 1; std::cout << "thread1 id: " << GetCurrentThreadId() << "\n"; flagtest = 2; flagtest = 0; } } HANDLE thread2;//全局变量,用于检测 DWORD WINAPI Thread2(LPVOID lpParameter) { while (1) { Sleep(100000); } } int flag = 1; DWORD WINAPI Thread3(LPVOID lpParameter) { int i = 0; while (1) { Sleep(1000); i++; std::cout << i<<"\tthread2 id: " << GetCurrentThreadId() << "\n"; if (i % 5 == 0) { while (flagtest > 0) {} if (flag == 1) { SuspendThread(thread1); flag = 0; continue; } else { ResumeThread(thread1); flag = 1; continue; } } } } int ThreadTotal = 2; HANDLE* m_phWorkerThreads; #include <aclapi.h> int main() { int res; std::cout << "Hello World!\n"; thread1 = CreateThread(NULL, 0, Thread1, NULL, NULL, NULL); thread2 = CreateThread(NULL, 0, Thread3, NULL, NULL, NULL);//THREAD_SUSPEND_RESUME m_phWorkerThreads = new HANDLE[ThreadTotal]; m_phWorkerThreads[0] = thread1; m_phWorkerThreads[1] = thread2; //WaitForSingleObject(thread2, INFINITE); WaitForMultipleObjects(ThreadTotal, m_phWorkerThreads, TRUE, INFINITE); } // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单 // 调试程序: F5 或调试 >“开始调试”菜单 // 入门使用技巧: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
注意, SuspendThread 是挂起其中一个程序,此处两个线程同时向控制台输出数据,所以此处存在竞争关系,挂起时候如果被挂起的线程正在占据控制台资源,,,就会导致正在执行的线程无法向控制台输出数据的情况,
有控制台竞争资源就导致各种乱七八糟的东西,因此在使用线程挂起时候一定要注意资源的竞争问题,此处使用
while (flagtest > 0) {}
避免对控制台的精致
//
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2021-05-19 c++ centos linux mysql通讯案例(安装和验证)