//===-- MainLoopWindows.h ---------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_HOST_WINDOWS_MAINLOOPWINDOWS_H #define LLDB_HOST_WINDOWS_MAINLOOPWINDOWS_H #include "lldb/Host/Config.h" #include "lldb/Host/MainLoopBase.h" #include #include #include namespace lldb_private { // Windows-specific implementation of the MainLoopBase class. It can monitor // socket descriptors for readability using WSAEventSelect. Non-socket file // descriptors are not supported. class MainLoopWindows : public MainLoopBase { public: MainLoopWindows(); ~MainLoopWindows() override; ReadHandleUP RegisterReadObject(const lldb::IOObjectSP &object_sp, const Callback &callback, Status &error) override; Status Run() override; protected: void UnregisterReadObject(IOObject::WaitableHandle handle) override; void TriggerPendingCallbacks() override; private: void ProcessReadObject(IOObject::WaitableHandle handle); llvm::Expected Poll(); struct FdInfo { void *event; Callback callback; }; llvm::DenseMap m_read_fds; void *m_trigger_event; }; } // namespace lldb_private #endif // LLDB_HOST_WINDOWS_MAINLOOPWINDOWS_H