先上一段简单封装的Thread Class,其实主要是依靠“std::tr1::bind”和“std::tr1::function”来实现的(主要是c++11和boost的内容),以后再作详细解释为什么这个类要这样写比较合适吧以及程序的优化,比如互斥锁其实可以使用std::lock_guard来管理互斥锁。
#include <thread>
#include <iostream>
#include <ostream>
#include <fstream>
#include <mutex>
#include <time.h>
class FileOperation {
public:
FileOperation();
~FileOperation();
private:
std::mutex m_mutex;
public:
void Read();
void Write();
};
FileOperation::FileOperation(){
}
FileOperation::~FileOperation(){
}
void FileOperation::Read(){
while (true){
m_mutex.lock();
char *buffer = new char[256];
std::ifstream ifs("Read.txt");
if(ifs.is_open()){
while (!ifs.eof()){
ifs.getline(buffer,100);
std::cout<<buffer;
}
std::cout<<std::endl;
}
ifs.close();
delete[] buffer;
std::chrono::milliseconds timespan(5);
std::this_thread::sleep_for(timespan);
m_mutex.unlock();
}
}
void FileOperation::Write(){
srand((unsigned int)(time)(NULL));
while (true){
m_mutex.lock();
std::ofstream of("Read.txt");
if(of.is_open()){
// of.clear();
of<< rand()%10000<<std::endl;
}
of.close();
std::chrono::milliseconds timespan(5);
std::this_thread::sleep_for(timespan);
m_mutex.unlock();
}
}
class ThreadingClass {
typedef std::tr1::function< void(void) > ThreadFunctionCallBack;
public:
ThreadingClass(ThreadFunctionCallBack m)
:m_c(m),
m_EndTheading(true)
{}
~ThreadingClass();
private:
ThreadFunctionCallBack m_c;
bool m_EndTheading;
const unsigned int& ThreadingID() const;
public:
void RunThreading();
void StopThreading();
};
ThreadingClass::~ThreadingClass(){
}
const unsigned int& ThreadingClass::ThreadingID() const {
return 1;
}
void ThreadingClass::RunThreading() {
std::thread m_threading(m_c);
m_threading.detach();
}
void ThreadingClass::StopThreading(){
// m_threading.detach();
}
int main() {
FileOperation f;
ThreadingClass m_1(std::tr1::bind(&FileOperation::Read, &f));
ThreadingClass m_2(std::tr1::bind(&FileOperation::Write,&f));
m_1.RunThreading();
m_2.RunThreading();
std::cin.get();
return 0;
}