大并发服务器开发之基于对像的编程风格
来源:互联网 发布: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
- 大并发服务器开发之基于对像的编程风格
- C++服务器开发之基于对象的编程风格
- C++服务器开发之基于对象的编程风格
- 大并发服务器开发
- 大并发服务器开发
- 信号和 TIME_WAIT 对大并发服务器的影响
- 处理大并发之三 对libevent的初步认识
- 处理大并发之三 对libevent的初步认识
- 处理大并发之三 对libevent的初步认识
- 处理大并发之 对libevent的初步认识
- 处理大并发之 对libevent的初步认识
- 处理大并发之 对libevent的初步认识
- 处理大并发之三 对libevent的初步认识
- 处理大并发之二 对libevent的初步认识
- 处理大并发之三 对libevent的初步认识
- 服务器大并发的思考
- 网络编程之并发服务器,分布服务器
- 基于任务的并发编程之Parallel.Invoke(一)
- 洛谷最大子树和解题报告
- KISSY基础篇乄KISSY之DOM(2)
- 【Android】An activity without a UI must call finish() before onResume() complete
- 【Mysql】复杂SQL调优一例
- 记录caffe+ win7 64 +VS2013+matlab2016a+python 安装
- 大并发服务器开发之基于对像的编程风格
- 第十六周项目1-验证算法(1)冒泡排序
- 在线用户信息统计&单用户登录(update)
- ArcGIS API For Javacsript编辑客户端图形
- solr使用word分词时高亮结果错位的解决办法
- LocalBroadcastReceiver
- 运算符重载,虚函数,纯虚函数和抽象类
- PowerShell-3.多线程
- mysql的四种启动方式