关于多线程互斥

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 2022-05-11 13:56  邗影  阅读(28)  评论(0编辑  收藏  举报

导航