MCPcopy Create free account
hub / github.com/FreeCAD/FreeCAD / recomputeWorker

Method recomputeWorker

src/App/Application.cpp:3195–3230  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3193}
3194
3195void Application::recomputeWorker()
3196{
3197 while (!_stopRecomputeThread) {
3198 std::unique_lock<std::mutex> lock(_recomputeMutex);
3199 // Wait until either stop is signaled or there is at least one pending request.
3200 _recomputeRequestAvailable.wait(lock, [this] {
3201 return _stopRecomputeThread || !_recomputeRequests.empty();
3202 });
3203 if (_stopRecomputeThread) {
3204 break;
3205 }
3206
3207 // Process all pending recompute requests.
3208 while (!_recomputeRequests.empty()) {
3209 RecomputeRequest request = takeNextRecomputeRequest(_recomputeRequests);
3210 if (!request.documentName.empty()) {
3211 _recomputeDocumentsInProgress.insert(request.documentName);
3212 }
3213
3214 // Unlock while processing to allow other threads to add new requests.
3215 lock.unlock();
3216
3217 RecomputeResult result = processRecomputeRequest(request);
3218
3219 if (request.callback) {
3220 request.callback(request, result);
3221 }
3222
3223 lock.lock();
3224 if (!request.documentName.empty()) {
3225 _recomputeDocumentsInProgress.erase(request.documentName);
3226 _recomputeStateChanged.notify_all();
3227 }
3228 }
3229 }
3230}
3231
3232void Application::logStatus()
3233{

Callers

nothing calls this directly

Calls 8

takeNextRecomputeRequestFunction · 0.85
processRecomputeRequestFunction · 0.85
emptyMethod · 0.45
insertMethod · 0.45
unlockMethod · 0.45
callbackMethod · 0.45
lockMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected