49 lines
		
	
	
		
			877 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			877 B
		
	
	
	
		
			C++
		
	
	
	
| // PHZ
 | |
| // 2018-5-15
 | |
| 
 | |
| #ifndef XOP_SELECT_TASK_SCHEDULER_H
 | |
| #define XOP_SELECT_TASK_SCHEDULER_H
 | |
| 
 | |
| #include "TaskScheduler.h"
 | |
| #include "Socket.h"
 | |
| #include <mutex>
 | |
| #include <unordered_map>
 | |
| 
 | |
| #if defined(__linux) || defined(__linux__) 
 | |
| #include <sys/select.h>
 | |
| #include <sys/time.h>
 | |
| #include <sys/types.h>
 | |
| #include <unistd.h>
 | |
| #endif
 | |
| 
 | |
| namespace xop
 | |
| {	
 | |
| 
 | |
| class SelectTaskScheduler : public TaskScheduler
 | |
| {
 | |
| public:
 | |
| 	SelectTaskScheduler(int id = 0);
 | |
| 	virtual ~SelectTaskScheduler();
 | |
| 
 | |
| 	void UpdateChannel(ChannelPtr channel);
 | |
| 	void RemoveChannel(ChannelPtr& channel);
 | |
| 	bool HandleEvent(int timeout);
 | |
| 	
 | |
| private:
 | |
| 	fd_set fd_read_backup_;
 | |
| 	fd_set fd_write_backup_;
 | |
| 	fd_set fd_exp_backup_;
 | |
| 	SOCKET maxfd_ = 0;
 | |
| 
 | |
| 	bool is_fd_read_reset_ = false;
 | |
| 	bool is_fd_write_reset_ = false;
 | |
| 	bool is_fd_exp_reset_ = false;
 | |
| 
 | |
| 	std::mutex mutex_;
 | |
| 	std::unordered_map<SOCKET, ChannelPtr> channels_;
 | |
| };
 | |
| 
 | |
| }
 | |
| 
 | |
| #endif
 |