最近弄定时器,需要一个类似 Linux 中文件描述符的概念。每启动一个定时器都返回一个定时器的 handle (fd).
handle 从 0 开始,生成时永远取其取值范围内最小的数字。于是有:
1 #include <set> 2 3 class FDManager 4 { 5 public: 6 FDManager():cfg_fd_count(1024 * 1024), cur_max_fd(0){ unused_fd.clear(); } 7 ~FDManager(){} 8 public: 9 int getUnusedFd() 10 { 11 if(cur_max_fd >= cfg_fd_count) 12 return -1; 13 14 if(unused_fd.empty()) 15 return cur_max_fd++; 16 17 int fd = *unused_fd.begin(); 18 unused_fd.erase(unused_fd.begin()); 19 20 return fd; 21 } 22 23 void putUnusedFd(int fd) 24 { 25 unused_fd.insert(fd); 26 } 27 28 private: 29 int cfg_fd_count; 30 31 private: 32 int cur_max_fd; 33 std::set<int> unused_fd; 34 };