工作以来曾几次接触多线程,今天来记录一下了。前段时间写过dll封装和使用的一个小例子(下面有链接)。在那个例子上稍加改动加上多线程相应应用,记录下自己工作的内容,方便以后大家多线程工程时运用。
下面这个例子模拟在正常工作中可能出现不稳定因素,在正常工作的主线程中创建一个修复子线程,每当出现不稳定因素修复线程进行修复工作,然后继续进行正常工作。工程如下:
跟文章“用例子,通俗介绍回掉函数的使用”做对比:dll工程添加了ThreadCond类:
#pragma once
#include <time.h>
#include<iostream>
#include <mutex>
#include <condition_variable>
#include <thread>
#include<Windows.h>
//禁止拷贝
class NoCopy
{
protected:
NoCopy() {}
~NoCopy() {}
private:
NoCopy(const NoCopy&) = delete;
const NoCopy& operator=(const NoCopy&) = delete;
};
//线程控制类
class ThreadCond : private NoCopy
{
public:
inline bool Wait(int timeOut)
{
std::unique_lock<std::mutex> lock(this->_lockMutex);
_signaled = false;
int ret = 0;
if (this->_cvLock.wait_for(lock, std::chrono::milliseconds(timeOut)) == std::cv_status::timeout)
{
return false;
}
return true;
}