mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-29 02:21:44 +00:00
After replacing the remaining include guards with `#pragma once`, I was able to merge all the wpiformat configs into one file in the repo root. This should make the config easier to reason about and maintain in the future.
60 lines
1.5 KiB
C++
60 lines
1.5 KiB
C++
// Copyright (c) FIRST and other WPILib contributors.
|
|
// Open Source Software; you can modify and/or share it under the terms of
|
|
// the WPILib BSD license file in the root directory of this project.
|
|
|
|
#pragma once
|
|
|
|
#include <functional>
|
|
#include <memory>
|
|
|
|
#include "wpi/net/uv/Loop.hpp"
|
|
#include "wpi/util/SafeThread.hpp"
|
|
|
|
namespace wpi::net {
|
|
|
|
/**
|
|
* Executes an event loop on a separate thread.
|
|
*/
|
|
class EventLoopRunner {
|
|
public:
|
|
using LoopFunc = std::function<void(uv::Loop&)>;
|
|
|
|
EventLoopRunner();
|
|
virtual ~EventLoopRunner();
|
|
|
|
/**
|
|
* Stop the loop. Once the loop is stopped it cannot be restarted.
|
|
* This function does not return until the loop has exited.
|
|
*/
|
|
void Stop();
|
|
|
|
/**
|
|
* Run a function asynchronously (once) on the loop.
|
|
* This is safe to call from any thread, but is NOT safe to call from the
|
|
* provided function (it will deadlock).
|
|
* @param func function to execute on the loop
|
|
*/
|
|
void ExecAsync(LoopFunc func);
|
|
|
|
/**
|
|
* Run a function synchronously (once) on the loop.
|
|
* This is safe to call from any thread, but is NOT safe to call from the
|
|
* provided function (it will deadlock).
|
|
* This does not return until the function finishes executing.
|
|
* @param func function to execute on the loop
|
|
*/
|
|
void ExecSync(LoopFunc func);
|
|
|
|
/**
|
|
* Get the loop. If the loop thread is not running, returns nullptr.
|
|
* @return The loop
|
|
*/
|
|
std::shared_ptr<uv::Loop> GetLoop();
|
|
|
|
private:
|
|
class Thread;
|
|
wpi::util::SafeThreadOwner<Thread> m_owner;
|
|
};
|
|
|
|
} // namespace wpi::net
|