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
|