关于多线程互斥

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();

    
}
复制代码

 

posted on   邗影  阅读(32)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示