MCPcopy Create free account
hub / github.com/TDesktop-x64/tdesktop / onTaskAdded

Method onTaskAdded

Telegram/SourceFiles/storage/localimageloader.cpp:322–360  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

320}
321
322void TaskQueueWorker::onTaskAdded() {
323 if (_inTaskAdded) return;
324 _inTaskAdded = true;
325
326 bool someTasksLeft = false;
327 do {
328 auto task = std::unique_ptr<Task>();
329 {
330 QMutexLocker lock(&_queue->_tasksToProcessMutex);
331 if (!_queue->_tasksToProcess.empty()) {
332 task = std::move(_queue->_tasksToProcess.front());
333 _queue->_tasksToProcess.pop_front();
334 _queue->_taskInProcessId = task->id();
335 }
336 }
337
338 if (task) {
339 task->process();
340 bool emitTaskProcessed = false;
341 {
342 QMutexLocker lockToProcess(&_queue->_tasksToProcessMutex);
343 if (_queue->_taskInProcessId == task->id()) {
344 _queue->_taskInProcessId = TaskId();
345 someTasksLeft = !_queue->_tasksToProcess.empty();
346
347 QMutexLocker lockToFinish(&_queue->_tasksToFinishMutex);
348 emitTaskProcessed = _queue->_tasksToFinish.empty();
349 _queue->_tasksToFinish.push_back(std::move(task));
350 }
351 }
352 if (emitTaskProcessed) {
353 taskProcessed();
354 }
355 }
356 QCoreApplication::processEvents();
357 } while (someTasksLeft && !thread()->isInterruptionRequested());
358
359 _inTaskAdded = false;
360}
361
362SendingAlbum::SendingAlbum() : groupId(base::RandomValue<uint64>()) {
363}

Callers

nothing calls this directly

Calls 4

frontMethod · 0.80
emptyMethod · 0.45
idMethod · 0.45
processMethod · 0.45

Tested by

no test coverage detected