C++服务器开发之基于对象的编程风格
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来实现,这就是基于对象的编程风格。
感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。
博主网址:http://www.cnblogs.com/ChinacloudTech/
独立博客:http://futuretechx.com
如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:1145356699@qq.com。
本博客为博主原创,欢迎转载,但必须注明博客来源。
更多关于游戏开发的内容也可关注微信公众号:微浪游戏