1//===-- MainLoopWindows.h ---------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_HOST_WINDOWS_MAINLOOPWINDOWS_H
10#define LLDB_HOST_WINDOWS_MAINLOOPWINDOWS_H
11
12#include "lldb/Host/Config.h"
13#include "lldb/Host/MainLoopBase.h"
14#include <csignal>
15#include <list>
16#include <vector>
17
18namespace lldb_private {
19
20// Windows-specific implementation of the MainLoopBase class. It can monitor
21// socket descriptors for readability using WSAEventSelect. Non-socket file
22// descriptors are not supported.
23class MainLoopWindows : public MainLoopBase {
24public:
25 MainLoopWindows();
26 ~MainLoopWindows() override;
27
28 ReadHandleUP RegisterReadObject(const lldb::IOObjectSP &object_sp,
29 const Callback &callback,
30 Status &error) override;
31
32 Status Run() override;
33
34protected:
35 void UnregisterReadObject(IOObject::WaitableHandle handle) override;
36
37 void TriggerPendingCallbacks() override;
38
39private:
40 void ProcessReadObject(IOObject::WaitableHandle handle);
41 llvm::Expected<size_t> Poll();
42
43 struct FdInfo {
44 void *event;
45 Callback callback;
46 };
47 llvm::DenseMap<IOObject::WaitableHandle, FdInfo> m_read_fds;
48 void *m_trigger_event;
49};
50
51} // namespace lldb_private
52
53#endif // LLDB_HOST_WINDOWS_MAINLOOPWINDOWS_H
54

source code of lldb/include/lldb/Host/windows/MainLoopWindows.h