summaryrefslogtreecommitdiffstats
path: root/src/OSSupport/NetworkLookup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/OSSupport/NetworkLookup.cpp')
-rw-r--r--src/OSSupport/NetworkLookup.cpp63
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();
+ }
+}
+
+
+