Browse Source

SC: limit number of running engines

tags/v1.3.0
Brian Heim 5 years ago
parent
commit
54573e11d4
1 changed files with 18 additions and 1 deletions
  1. +18
    -1
      src/SuperColliderEngine.cpp

+ 18
- 1
src/SuperColliderEngine.cpp View File

@@ -79,11 +79,23 @@ private:

class SuperColliderEngine final : public ScriptEngine {
public:
~SuperColliderEngine() noexcept { _clientThread.join(); }
~SuperColliderEngine() noexcept {
// Only join if client was started in the first place.
if (_clientThread.joinable())
_clientThread.join();
engineRunning = false;
}

std::string getEngineName() override { return "SuperCollider"; }

int run(const std::string& path, const std::string& script) override {
if (engineRunning) {
display("Only one SuperCollider engine may run at once");
return 1;
}

engineRunning = true;

if (!_clientThread.joinable()) {
_clientThread = std::thread([this, script]() {
_client.reset(new SC_VcvPrototypeClient(this));
@@ -110,6 +122,9 @@ public:
}

private:
// Used to limit the number of running SC instances to 1.
static bool engineRunning;

bool waitingOnClient() const noexcept { return !_clientRunning; }
bool clientHasError() const noexcept { return !_client->isOk(); }
void finishClientLoading() noexcept { _clientRunning = true; }
@@ -119,6 +134,8 @@ private:
std::atomic_bool _clientRunning{false}; // set to true when client is ready to process data
};

bool SuperColliderEngine::engineRunning = false;

SC_VcvPrototypeClient::SC_VcvPrototypeClient(SuperColliderEngine* engine)
: SC_LanguageClient("SC VCV-Prototype client")
, _engine(engine)


Loading…
Cancel
Save