关于多线程互斥
1 windows的临界区


demo:
cap.h #pragma once #include <windows.h> #include<iostream> class cap { public: cap(); ~cap(); int startCap(); int stopCap(); int docap(); private: bool caping; int number; void* threadhandle; DWORD threadmyid; }; //------------------------------------------------ cap.cpp //--------------------------------------------------- #include "cap.h" cap::cap() { caping = false; number = 0; threadhandle = nullptr; threadmyid = 0; } cap::~cap() { caping = false; number = 0; threadhandle = nullptr; threadmyid = 0; } DWORD WINAPI capdata(void * para)//static of cap class is ok { if (para) { cap* capobj = (cap*)para; capobj->docap(); } return 1; } int cap::startCap() { caping = true; threadhandle = CreateThread(NULL ,0,capdata,this,0,&threadmyid); if (threadhandle == nullptr) { return 0; } return 1; } int cap::stopCap() { printf("stop1"); caping = false; //等待线程结束,退出线程 printf("stop2"); WaitForSingleObject(threadhandle, INFINITE);//阻塞当前线程,等待threadhandle的线程退出 CloseHandle(threadhandle); printf("stop3"); return 1; } int cap::docap() { while (caping) { printf("caping............"); number++; Sleep(1); } std::cout << number << std::endl; return 0; }
#include<iostream> #include<stdio.h> #include"cap.h" int main() { cap *obj = new cap(); obj->startCap();//cap number getchar(); obj->stopCap(); getchar(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律