MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
file_watcher.hpp
1#ifndef MSTL_CORE_FILE_FILE_WATCHER_HPP__
2#define MSTL_CORE_FILE_FILE_WATCHER_HPP__
3#include "MSTL/core/container/vector.hpp"
8#include "path.hpp"
10
11class MSTL_API file_watcher {
12public:
13 using callback_t = function<void(const path&, FILE_WATCH_EVENT)>;
14
15private:
16 _MSTL path watch_path_;
17 bool recursive_;
18 atomic<bool> watching_{false};
19 atomic<bool> stopping_{false};
20 callback_t callback_;
21 FILE_WATCH_EVENT current_events_{FILE_WATCH_EVENT::ALL};
22 vector<char> buffer_;
23 mutex callback_mutex_;
24
25#ifdef MSTL_PLATFORM_WINDOWS__
26 ::HANDLE dir_handle_ = INVALID_HANDLE_VALUE;
27 ::HANDLE completion_port_ = INVALID_HANDLE_VALUE;
28 ::OVERLAPPED overlapped_{};
29#elif defined(MSTL_PLATFORM_LINUX__)
30 int inotify_fd_ = -1;
31 int watch_descriptor_ = -1;
32 int event_fd_ = -1;
33#endif
34
35 thread watch_thread_;
36
37 void watch_thread_func();
38
39public:
40 explicit file_watcher(const path& watch_path, bool recursive = false);
41 ~file_watcher();
42
43 file_watcher(const file_watcher&) = delete;
44 file_watcher& operator =(const file_watcher&) = delete;
45
46 bool start(callback_t callback, FILE_WATCH_EVENT events = FILE_WATCH_EVENT::ALL);
47 void stop();
48
49 const path& watch_path() const noexcept { return watch_path_; }
50 FILE_WATCH_EVENT current_events() const noexcept { return current_events_; }
51
52 bool is_watching() const noexcept { return watching_.load(); }
53 bool is_recursive() const noexcept { return recursive_; }
54
55 bool update_watch(FILE_WATCH_EVENT events);
56 bool update_recursive(bool recursive);
57};
58
60#endif // MSTL_CORE_FILE_FILE_WATCHER_HPP__
MSTL原子类型完整实现
MSTL通用函数包装器
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
MSTL互斥锁
T load(const memory_order mo=memory_order_seq_cst) const noexcept
原子加载操作
MSTL线程支持