大并发服务器开发之基于对像的编程风格

来源:互联网 发布:mac磁盘被锁定 编辑:程序博客网 时间:2024/05/04 10:41
Thread.h
#ifndef _THREAD_H_#define _THREAD_H_#include <pthread.h>#include <boost/function.hpp>class Thread{public:typedef boost::function<void ()> ThreadFunc;explicit Thread(const ThreadFunc& func);void Start();void Join();void SetAutoDelete(bool autoDelete);private:static void* ThreadRoutine(void* arg);void Run();ThreadFunc func_;pthread_t threadId_;bool autoDelete_;};#endif // _THREAD_H_

Thread.cpp

#include "Thread.h"#include <iostream>using namespace std;Thread::Thread(const ThreadFunc& func) : func_(func), autoDelete_(false){}void Thread::Start(){pthread_create(&threadId_, NULL, ThreadRoutine, this);}void Thread::Join(){pthread_join(threadId_, NULL);}void* Thread::ThreadRoutine(void* arg){Thread* thread = static_cast<Thread*>(arg);thread->Run();if (thread->autoDelete_)delete thread;return NULL;}void Thread::SetAutoDelete(bool autoDelete){autoDelete_ = autoDelete;}void Thread::Run(){func_();}

Thread_Test.cpp

#include "Thread.h"#include <boost/bind.hpp>#include <unistd.h>#include <iostream>using namespace std;class Foo{public:Foo(int count) : count_(count){}void MemberFun(){while (count_--){cout<<"this is a test ..."<<endl;sleep(1);}}void MemberFun2(int x){while (count_--){cout<<"x="<<x<<" this is a test2 ..."<<endl;sleep(1);}}int count_;};void ThreadFunc(){cout<<"ThreadFunc ..."<<endl;}void ThreadFunc2(int count){while (count--){cout<<"ThreadFunc2 ..."<<endl;sleep(1);}}int main(void){Thread t1(ThreadFunc);Thread t2(boost::bind(ThreadFunc2, 3));Foo foo(3);Thread t3(boost::bind(&Foo::MemberFun, &foo));Foo foo2(3);Thread t4(boost::bind(&Foo::MemberFun2, &foo2, 1000));t1.Start();t2.Start();t3.Start();t4.Start();t1.Join();t2.Join();t3.Join();t4.Join();return 0;}

不采用面向对象的编程风格,使用boost bind/function来实现,这就是基于对象的编程风格。

0 0