Skip to content

Commit ab2e871

Browse files
author
Levent KARAGÖL
committed
Additional enhancements were made so that each event runs on an independent Thread
1 parent de50810 commit ab2e871

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

src/libcpp-event-hub.hpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
33
Thread-safe generic event library for C++ (17+)
4-
version 1.0.0
4+
version 1.1.0
55
https://github.com/leventkaragol/libcpp-event-hub
66
77
If you encounter any issues, please submit a ticket at https://github.com/leventkaragol/libcpp-event-hub/issues
@@ -38,6 +38,7 @@ SOFTWARE.
3838
#include <any>
3939
#include <iostream>
4040
#include <mutex>
41+
#include <future>
4142

4243
namespace lklibs
4344
{
@@ -81,15 +82,21 @@ namespace lklibs
8182
{
8283
for (const auto& [id, listener] : listeners_.at(eventName))
8384
{
84-
listener(eventName, sender, eventData);
85+
std::thread([listener, eventName, sender, eventData]()
86+
{
87+
listener(eventName, sender, eventData);
88+
}).detach();
8589
}
8690
}
8791

8892
if (listeners_.find("*") != listeners_.end())
8993
{
9094
for (const auto& [id, listener] : listeners_.at("*"))
9195
{
92-
listener(eventName, sender, eventData);
96+
std::thread([listener, eventName, sender, eventData]()
97+
{
98+
listener(eventName, sender, eventData);
99+
}).detach();
93100
}
94101
}
95102
}
@@ -107,7 +114,7 @@ namespace lklibs
107114
{
108115
std::unique_lock lock(mutex_);
109116

110-
auto id = nextListenerId_++;
117+
const auto id = nextListenerId_++;
111118

112119
auto wrappedListener = [listener](const std::string& eventName, const std::string& sender, const std::any& data)
113120
{

test/test.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <gtest/gtest.h>
22
#include "libcpp-event-hub.hpp"
33
#include <string>
4+
#include <thread>
45

56
using namespace lklibs;
67

@@ -21,6 +22,8 @@ TEST(EventHubTest, AddListenerAndEmitString)
2122

2223
eventHub.emit("testEvent", "testSender", std::string("testData"));
2324

25+
std::this_thread::sleep_for(std::chrono::milliseconds(100));
26+
2427
EXPECT_TRUE(listenerCalled);
2528

2629
eventHub.removeListener("testEvent", listenerId);
@@ -43,6 +46,8 @@ TEST(EventHubTest, AddListenerAndEmitInt)
4346

4447
eventHub.emit("testEvent", "testSender", 7);
4548

49+
std::this_thread::sleep_for(std::chrono::milliseconds(100));
50+
4651
EXPECT_TRUE(listenerCalled);
4752

4853
eventHub.removeListener("testEvent", listenerId);
@@ -75,6 +80,8 @@ TEST(EventHubTest, GeneralListener)
7580

7681
eventHub.emit("testEvent", "testSender", std::string("testData"));
7782

83+
std::this_thread::sleep_for(std::chrono::milliseconds(100));
84+
7885
EXPECT_TRUE(generalListenerCalled);
7986
EXPECT_TRUE(specificListenerCalled);
8087

@@ -97,6 +104,8 @@ TEST(EventHubTest, RemoveListener)
97104

98105
eventHub.emit("testEvent", "testSender", std::string("testData"));
99106

107+
std::this_thread::sleep_for(std::chrono::milliseconds(100));
108+
100109
EXPECT_FALSE(listenerCalled);
101110
}
102111

0 commit comments

Comments
 (0)