zoukankan      html  css  js  c++  java
  • 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来实现,这就是基于对象的编程风格。

  • 相关阅读:
    setHapticFeedbackEnabled在androi的作用
    Android 跑马灯
    jQuery中绑定事件的命名空间详解
    可见即所得的CSS编辑设计
    盘点8种CSS实现垂直居中水平居中的绝对定位居中技术
    用到的知识点
    用PS去除图片中文字的6个方法
    html页面头部里的meta
    px pt em对应关系
    phpMyAdmin安装与配置(涉及LAMP配置)
  • 原文地址:https://www.cnblogs.com/xieweikai/p/6817668.html
Copyright © 2011-2022 走看看