c++程序运行出窗口后输入参数再按回车键为什么就消失了。他让凑够30字,但我就这个问题,希望大家帮帮忙
这要看代码怎么写的啊
在代码结束前加上一行
getchar();
让程序暂停下。
首先新建一个CMyMutex类
对临界区方法进行封装,利用类的构造和析构将对象进行构造和析构,在类中创建加锁解锁函数。
(1)CMyMutex.h
:
#pragma once
#include <windows.h>
class CMyMutex
{
public:
CMyMutex();
~CMyMutex();
void lock();
void unlock();
private:
CRITICAL_SECTION m_cs;
};
CMyMutex.cpp
:
#include "CMyMutex.h"
CMyMutex::CMyMutex()
{
//使用前,需要对该对象进行初始化
InitializeCriticalSection(&m_cs);
}
CMyMutex::~CMyMutex()
{
//当不在使用该锁时,需要将锁删掉
DeleteCriticalSection(&m_cs);
}
void CMyMutex::lock()
{
//进去加锁
EnterCriticalSection(&m_cs);
}
void CMyMutex::unlock()
{
//出去解锁
LeaveCriticalSection(&m_cs);
}
(2)main()中利用封装好的类进行对象创建析构及实现加锁解锁功能
:
#include <tchar.h>
#include <iostream>
#include <thread>
#include <mutex>
#include <windows.h>
#include "CMyMutex.h"
using namespace std;
int g_nData = 0;
// 创建临界区对象,等价于锁
CMyMutex g_mtx;
void foo() {
//进来上锁
g_mtx.lock();
for (int i = 0; i < 100000; i++) {
g_nData++;
}
//出去解锁
g_mtx.unlock();
}
int _tmain(int argc, _TCHAR* argv[])
{
std::thread t(foo);
//进来上锁
g_mtx.lock();
for (int i = 0; i < 100000; i++) {
g_nData++;
}
//出去解锁
g_mtx.unlock();
t.join();
std::cout << g_nData << std::endl;
return 0;
}
运行结果:
上述过程实现了临界区方法的封装,但是仍然使用的是手动的加锁和解锁功能,一旦忘记添加就会造成和上篇中忘记添加解锁造成无法跳出的问题。