@@ -32,9 +32,13 @@ namespace base {
32
32
33
33
namespace {
34
34
35
- const size_t kReservedSizeForTimersMap = 100 ;
35
+ const size_t kReservedSizeForTimersMap = 50 ;
36
36
const float kLoadFactorForTimersMap = 0.5 ;
37
37
38
+ #if defined(Q_OS_WINDOWS)
39
+ const size_t kReservedSizeForEvents = 20 ;
40
+ #endif // defined(Q_OS_WINDOWS)
41
+
38
42
} // namespace
39
43
40
44
// --------------------------------------------------------------------------------------------------
@@ -47,6 +51,10 @@ AsioEventDispatcher::AsioEventDispatcher(QObject* parent)
47
51
48
52
timers_.reserve (kReservedSizeForTimersMap );
49
53
timers_.max_load_factor (kLoadFactorForTimersMap );
54
+
55
+ #if defined(Q_OS_WINDOWS)
56
+ events_.reserve (kReservedSizeForEvents );
57
+ #endif // defined(Q_OS_WINDOWS)
50
58
}
51
59
52
60
// --------------------------------------------------------------------------------------------------
@@ -191,7 +199,7 @@ int AsioEventDispatcher::remainingTime(int id)
191
199
}
192
200
193
201
// --------------------------------------------------------------------------------------------------
194
- #if defined(Q_OS_WIN )
202
+ #if defined(Q_OS_WINDOWS )
195
203
bool AsioEventDispatcher::registerEventNotifier (QWinEventNotifier* notifier)
196
204
{
197
205
HANDLE handle = notifier->handle ();
@@ -212,10 +220,10 @@ bool AsioEventDispatcher::registerEventNotifier(QWinEventNotifier* notifier)
212
220
events_.emplace_back (notifier, wait_handle);
213
221
return true ;
214
222
}
215
- #endif // defined(Q_OS_WIN )
223
+ #endif // defined(Q_OS_WINDOWS )
216
224
217
225
// --------------------------------------------------------------------------------------------------
218
- #if defined(Q_OS_WIN )
226
+ #if defined(Q_OS_WINDOWS )
219
227
void AsioEventDispatcher::unregisterEventNotifier (QWinEventNotifier* notifier)
220
228
{
221
229
auto it = events_.begin ();
@@ -234,13 +242,13 @@ void AsioEventDispatcher::unregisterEventNotifier(QWinEventNotifier* notifier)
234
242
}
235
243
}
236
244
}
237
- #endif // defined(Q_OS_WIN )
245
+ #endif // defined(Q_OS_WINDOWS )
238
246
239
247
// --------------------------------------------------------------------------------------------------
240
248
void AsioEventDispatcher::wakeUp ()
241
249
{
242
250
// To stop run_one inside method processEvents completes.
243
- io_context_. stop ( );
251
+ asio::post (io_context_, []{} );
244
252
}
245
253
246
254
// --------------------------------------------------------------------------------------------------
@@ -323,7 +331,7 @@ void AsioEventDispatcher::asyncWaitForNextTimer()
323
331
return ;
324
332
325
333
TimerData& timer = it->second ;
326
- timer.start_time = Clock::now () ;
334
+ timer.start_time = timer. expire_time ;
327
335
timer.expire_time = timer.start_time + Milliseconds (timer.interval );
328
336
329
337
asyncWaitForNextTimer ();
0 commit comments