Untitled
unknown
plain_text
2 years ago
2.3 kB
2
Indexable
void BlowOrDestroyThread() { while (!blowDestroyMustExit.load(std::memory_order_relaxed)) { printf("BlowOrDestroyThread\n"); if (flag.load(std::memory_order_relaxed)) { //std::this_thread::sleep_for(std::chrono::milliseconds(1500)); int add = (test::Points::startPointCount-1) * p.nodeSize; for (int i = 0; i < p.nodeSize; ++i)// TODO:: if I put 64 here Counter thread hangs { int range = (test::Points::startPointCount) * p.nodeSize; int position = p.GenerateValidPosition(p.nodeSize - 1) + add; if (i % 2) { std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); int time = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count(); printf("blow element position: %d, range: %d\n", position, range); p.SetInitDataOnPosition(position, time); p.AssignNewPoints(range); test::Points::startPointCount++; } p.SetPointFlag(position, false); } flag.store(false, std::memory_order_relaxed); } } } // click on window initiate first points node and starts counter thread void test::on_click(int x, int y) { printf("on_click\n"); std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now(); click++; if (!hitOnce) { //int time = globalTime.load(std::memory_order_relaxed); int time = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count(); p.SetInitData(x, y, time); p.AssignNewPoints(0); //printf(" 1! x: %d, y: %d range: %d\n", x, temp, range); Points::startPointCount++; counterThread = std::thread(PointsThread); blowDestroyThread = std::thread(BlowOrDestroyThread); //blowDestroyThread.detach(); flag.store(true, std::memory_order_relaxed); hitOnce = true; } else if(Points::startPointCount < p.nodesSize-1) { int range = Points::startPointCount * p.nodeSize; int temp = 765 - y; printf(" 1! x: %d, y: %d range: %d\n", x, temp, range); //int time = globalTime.load(std::memory_order_relaxed); int time = std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count(); p.SetInitData(x, y, time); p.AssignNewPoints(range); Points::startPointCount++; //hitOnce = false; flag.store(true, std::memory_order_relaxed); } }