MCPcopy Create free account
hub / github.com/VCVRack/Rack / Engine_relaunchWorkers

Function Engine_relaunchWorkers

src/engine/Engine.cpp:287–323  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

285
286
287static void Engine_relaunchWorkers(Engine* that, int threadCount) {
288 Engine::Internal* internal = that->internal;
289 if (threadCount == internal->threadCount)
290 return;
291
292 if (internal->threadCount > 0) {
293 // Stop engine workers
294 for (EngineWorker& worker : internal->workers) {
295 worker.requestStop();
296 }
297 internal->engineBarrier.wait();
298
299 // Join and destroy engine workers
300 for (EngineWorker& worker : internal->workers) {
301 worker.join();
302 }
303 internal->workers.resize(0);
304 }
305
306 // Configure engine
307 internal->threadCount = threadCount;
308
309 // Set barrier counts
310 internal->engineBarrier.setThreads(threadCount);
311 internal->workerBarrier.setThreads(threadCount);
312
313 if (threadCount > 0) {
314 // Create and start engine workers
315 internal->workers.resize(threadCount - 1);
316 for (int id = 1; id < threadCount; id++) {
317 EngineWorker& worker = internal->workers[id - 1];
318 worker.id = id;
319 worker.engine = that;
320 worker.start();
321 }
322 }
323}
324
325
326static void Engine_stepWorker(Engine* that, int threadId) {

Callers 2

~EngineMethod · 0.85
stepBlockMethod · 0.85

Calls 5

requestStopMethod · 0.80
joinMethod · 0.80
startMethod · 0.80
waitMethod · 0.45
setThreadsMethod · 0.45

Tested by

no test coverage detected