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来实现,这就是基于对象的编程风格。

    感谢您的阅读,若有不足之处,欢迎指教,共同学习、共同进步。 博主网址:http://www.cnblogs.com/ChinacloudTech/ 独立博客:http://futuretechx.com 如您喜欢,麻烦推荐一下;如您有新想法,欢迎提出,邮箱:1145356699@qq.com。 本博客为博主原创,欢迎转载,但必须注明博客来源。 更多关于游戏开发的内容也可关注微信公众号:微浪游戏
  • 相关阅读:
    网络基础之物理层和数据链路层
    mysql5.6 主从不同步 存储过程大事务导致
    1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts
    973. K Closest Points to Origin
    525. Contiguous Array
    1035. Uncrossed Lines
    1008. Construct Binary Search Tree from Preorder Traversal
    986. Interval List Intersections
    451. Sort Characters By Frequency
    如何在PHP中判断当前请求的类型【转】
  • 原文地址:https://www.cnblogs.com/ChinacloudTech/p/6180730.html
Copyright © 2011-2022 走看看