void testThreadsRunningAndTerminating() { // ONE stopped, TWO stopped IThread *one = new ThreadSimple(); IThread *two = new ThreadSimple(); assert(one->getId() == 0); assert(!one->isActive()); assert(two->getId() == 0); assert(!two->isActive()); assert(ThreadHolder::getActiveThreads() == 0); // ONE started, TWO started one->start(); two->start(); assert(one->getId() != 0); assert(one->isActive()); assert(two->getId() != 0); assert(two->isActive()); assert(ThreadHolder::getActiveThreads() == 2); Sleep(USUAL_DELAY); // ONE stopped, TWO started one->terminate(); assert(one->getId() == 0); assert(!one->isActive()); assert(two->getId() != 0); assert(two->isActive()); assert(ThreadHolder::getActiveThreads() == 1); Sleep(USUAL_DELAY); // ONE started, TWO started one->start(); assert(one->getId() != 0); assert(one->isActive()); assert(two->getId() != 0); assert(two->isActive()); assert(ThreadHolder::getActiveThreads() == 2); Sleep(USUAL_DELAY); // ONE stopped, TWO stopped one->terminate(); two->terminate(); assert(one->getId() == 0); assert(!one->isActive()); assert(two->getId() == 0); assert(!two->isActive()); assert(ThreadHolder::getActiveThreads() == 0); delete one; delete two; }