在 C++ 中使用多线程时绘图不流畅

Not smoothy in drawing when using multithread in c++

提问人:HCMUSer 提问时间:11/6/2023 最后编辑:TsyvarevHCMUSer 更新时间:11/6/2023 访问量:41

问:

我的程序有这个功能: 1 个线程用于车辆移动,1 个线程用于user_input,1 个线程用于使用该输入移动人员。 一步后,我将绘制车辆和人员。如果我使用单线程,那么它可以工作。当我使用多线程时,它有时会崩溃,并且人和车辆的显示不流畅。enter image description here

这是我的代码

void CGame::startGame()
{

    char user_input;
    bool input_ready = false;
    bool draw_finish = true;
    setGame();

    CPeople people;
    //g.runGame();


    char inp;
    condition_variable cv, cv2;
    mutex m;

    thread t1([&cv, &m, &user_input, &input_ready, &draw_finish, &cv2]() {

        while (true) {
            unique_lock<mutex> lock(m);
            cv2.wait(lock, [&draw_finish] {return draw_finish; });
            user_input = CConsole::getInput();
            input_ready = true;
            draw_finish = false;
            cv.notify_one();
        }
        });

    thread t3([&people, &cv, &m, &user_input, &input_ready, &draw_finish, &cv2]() {

        while (true) {
            unique_lock<mutex> lock(m);
            cv.wait(lock, [&input_ready] { return input_ready; });
            people.peopleMoving(user_input);
            //this_thread::sleep_for(chrono::milliseconds(10));
            draw_finish = true;
            input_ready = false;
            cv2.notify_one();
        }
        });
    //INPUT.get();
    mutex m2;
    thread t2([this, &m2, &cv, &draw_finish]() {
        //  unique_lock<mutex> lock(m);
        m2.lock();
    this->runObstacle();
    //this_thread::sleep_for(chrono::milliseconds(100));
    m2.unlock();


        });

    //while (true) {
    //  inp = CConsole::getInput();
    //  people.peopleMoving(inp);
    //  //std::this_thread::sleep_for(std::chrono::seconds());


    //}

    t1.join();
    t2.join();
    t3.join();
    //
}
 

绘制功能只是擦除旧位置并在新位置打印。

C++ 多线程 控制台 绘制 互斥锁

评论

0赞 Jesper Juhl 11/6/2023
请阅读最小可重复示例
1赞 Joseph Larson 11/7/2023
我们这里没有足够的资金来实际运行它。但是您应该做的第一件事是添加 try-catch 并尝试打印堆栈跟踪,以便您了解它崩溃的位置。或者从调试器运行它。“它崩溃了”使用起来没有多大用处。

答: 暂无答案