最近弄定时器,需要一个类似 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 };

 

相关文章:

  • 2021-06-23
  • 2021-05-10
  • 2022-01-02
  • 2022-01-17
  • 2021-05-23
  • 2021-12-09
猜你喜欢
  • 2021-07-09
  • 2021-09-26
  • 2022-03-04
  • 2021-06-12
  • 2021-06-29
  • 2021-09-02
  • 2021-08-13
相关资源
相似解决方案