MCPcopy Create free account
hub / github.com/KDAB/GammaRay / testTimerMultithreading

Function testTimerMultithreading

tests/timertoptest.cpp:144–218  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

142 }
143
144 void testTimerMultithreading()
145 {
146 createProbe();
147
148 {
149 auto *model = ObjectBroker::model(QStringLiteral("com.kdab.GammaRay.TimerModel"));
150 QVERIFY(model);
151
152 QSharedPointer<QThread> mainThread(new QThread);
153 mainThread->setObjectName("mainThread");
154
155 // main thread free timer operating on "mainThread" object
156 mainThread->startTimer(125);
157
158 // main thread qtimer
159 QSharedPointer<QTimer> mainTimer(new QTimer);
160 mainTimer->setObjectName("mainTimer");
161 mainTimer->setInterval(250);
162 mainTimer->start();
163
164 // "mainThread" thread "threadTimer" qtimer
165 QSharedPointer<QTimer> threadTimer(new QTimer);
166 threadTimer->setObjectName("threadTimer");
167 threadTimer->setInterval(100);
168 threadTimer->moveToThread(mainThread.data());
169
170 connect(mainThread.data(), &QThread::started, threadTimer.data(), static_cast<void (QTimer::*)()>(&QTimer::start));
171
172 int timerId = -1;
173 QTimer::singleShot(500, threadTimer.data(), [&]() {
174 // "threadTimer" thread free timer operating on "threadTimer" object
175 timerId = threadTimer->QObject::startTimer(250);
176 });
177
178 QSharedPointer<Deleter> deleter(new Deleter);
179 auto deleteTimer = new QTimer;
180 deleteTimer->setObjectName("deleteTimer");
181 deleteTimer->setInterval(1500);
182 connect(deleteTimer, &QTimer::timeout, deleter.data(), &Deleter::deleteSender);
183 deleteTimer->start();
184
185 mainThread->start();
186 QTest::qWait(6000);
187
188 QModelIndex idx;
189 QVERIFY(model->rowCount() >= 4);
190
191 idx = searchFixedIndex(model, "QThread (mainThread)");
192 QVERIFY(idx.isValid());
193 QCOMPARE(idx.data(ObjectModel::ObjectIdRole).value<ObjectId>(), ObjectId(mainThread.data()));
194
195 idx = searchFixedIndex(model, "QTimer (mainTimer)");
196 QVERIFY(idx.isValid());
197 QCOMPARE(idx.data(ObjectModel::ObjectIdRole).value<ObjectId>(), ObjectId(mainTimer.data()));
198
199 const auto idxs = searchFixedIndexes(model, "QTimer (threadTimer)");
200 QCOMPARE(idxs.size(), 2);
201 for (const QModelIndex &idx : idxs) {

Callers

nothing calls this directly

Calls 7

ObjectIdClass · 0.50
startMethod · 0.45
dataMethod · 0.45
rowCountMethod · 0.45
isValidMethod · 0.45
sizeMethod · 0.45
stopMethod · 0.45

Tested by

no test coverage detected