diff options
Diffstat (limited to 'src/OSSupport/NetworkLookup.cpp')
-rw-r--r-- | src/OSSupport/NetworkLookup.cpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/OSSupport/NetworkLookup.cpp b/src/OSSupport/NetworkLookup.cpp new file mode 100644 index 000000000..5cd7ecfc4 --- /dev/null +++ b/src/OSSupport/NetworkLookup.cpp @@ -0,0 +1,63 @@ + +// NetworkLookup.cpp + +// Implements the cNetworkLookup class representing an executor for asynchronous lookup tasks + + +#include "Globals.h" +#include "NetworkLookup.h" + + + + +cNetworkLookup::cNetworkLookup() : + cIsThread("NetworkLookup") +{ +} + + + + + +cNetworkLookup::~cNetworkLookup() +{ + Stop(); +} + + + + + +void cNetworkLookup::ScheduleLookup(std::function<void()> a_Lookup) +{ + m_WorkQueue.EnqueueItem(std::move(a_Lookup)); +} + + + + + +void cNetworkLookup::Stop() +{ + m_ShouldTerminate = true; + m_WorkQueue.Clear(); + m_WorkQueue.EnqueueItem([](){}); // Dummy work to wake up the thread + cIsThread::Stop(); +} + + + + + +void cNetworkLookup::Execute() +{ + while (!m_ShouldTerminate) + { + // Execute the next task in the queue + auto Work = m_WorkQueue.DequeueItem(); + Work(); + } +} + + + |