⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadbalancer.h

📁 .net 方面的开发说明资料。
💻 H
字号:
// ========================================================
// Thread management/balancing
//
// Design and Implementation by Floris van den Berg
// ========================================================

#ifndef THREADBALANCER_H
#define THREADBALANCER_H

#ifndef _LIST_
#include <list>
#endif

#ifndef _MEMORY_
#include <memory>
#endif

#ifndef BOOST_THREAD_WEK070601_HPP
#include <boost/thread/thread.hpp>
#endif

// --------------------------------------------------------

struct DataEntry;
struct ThreadEntry;
struct ITransport;
class ThreadBalancer;

// --------------------------------------------------------

typedef _STL::list<DataEntry *> DataList;
typedef _STL::list<ThreadEntry *> ThreadList;

// --------------------------------------------------------

struct ThreadFunction {
public :
	ThreadFunction(ThreadEntry *entry);
	void operator()();
	void iterate();

private :
	ThreadEntry *m_entry;
};

// --------------------------------------------------------

struct DataEntry {
	ITransport *transport;
	int entry_id;
};

struct ThreadEntry {
	boost::mutex cs_holder;
	bool thread_running;
	boost::thread *thread_handle;
	DataList contents;
	bool allow_balancing;
};

// --------------------------------------------------------

class ThreadBalancer {
public :
	virtual ~ThreadBalancer();
	int addTransport(ITransport *transport, bool allow_balancing);
	void removeTransport(int id);

public :
	static ThreadBalancer *getInstance();
	static bool isInstantiated();
	static void destroyInstance();

private :
	static ThreadBalancer *instance;

private : // private constructor
	ThreadBalancer();

private :
	void AbortThreads(ThreadList &list);
	int removeTransportFromThread(ThreadEntry *thread, DataList::iterator j);
	bool removeEntry(ThreadList &list, int id);
	void balance();

private :
	boost::mutex m_cs;
	ThreadList m_threads_unbalanced;
	ThreadList m_threads_balanced;
	int m_entry_number;
};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -