LeechCraft 0.6.70-17335-ge406ffdcaf
Modular cross-platform feature rich live environment.
Loading...
Searching...
No Matches
workerthreadtest.cpp
Go to the documentation of this file.
1/**********************************************************************
2 * LeechCraft - modular cross-platform feature rich internet client.
3 * Copyright (C) 2006-2014 Georg Rudoy
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * (See accompanying file LICENSE or copy at https://www.boost.org/LICENSE_1_0.txt)
7 **********************************************************************/
8
9#include "workerthreadtest.h"
10#include <QtTest>
11#include <workerthreadbase.h>
12
14
15namespace LC::Util
16{
17 struct Worker
18 {
19 QThread * const Main_;
20 int& Val_;
21
22 explicit Worker (int *val, QThread *main)
23 : Main_ { main }
24 , Val_ { *val }
25 {
26 }
27
28 void Increment (int n)
29 {
30 qDebug () << QThread::currentThread ();
31 QVERIFY (QThread::currentThread () != Main_);
32
33 Val_ += n;
34 }
35
36 void Quit (QEventLoop& loop)
37 {
38 QTimer::singleShot (0, &loop, &QEventLoop::quit);
39 }
40 };
41
42 void WorkerThreadTest::testWorkerThread ()
43 {
44 QEventLoop loop;
45 auto spin = [&loop]
46 {
47 QTimer::singleShot (100, &loop, &QEventLoop::quit);
48 loop.exec ();
49 };
50
51 qDebug () << Q_FUNC_INFO << QThread::currentThread ();
52
53 int val = 0;
54 WorkerThread<Worker> worker { &val, QThread::currentThread () };
55 worker.SetAutoQuit (true);
56 worker.SetQuitWait (1000);
57 worker.start ();
58
59 worker.SetPaused (true);
60 worker.ScheduleImpl (&Worker::Increment, 1);
61 worker.ScheduleImpl (&Worker::Increment, 2);
62 worker.ScheduleImpl (&Worker::Increment, 3);
63
64 spin ();
65 QCOMPARE (val, 0);
66
67 worker.SetPaused (false);
68
69 spin ();
70 QCOMPARE (val, 6);
71
72 worker.ScheduleImpl (&Worker::Increment, 10);
73
74 spin ();
75 QCOMPARE (val, 16);
76 }
77}
Worker(int *val, QThread *main)
QThread *const Main_
void Quit(QEventLoop &loop)