如何仅减慢一部分代码而不减慢其余部分的速度?

时间:2019-09-17 18:26:01

标签: c++ visual-studio

我尝试使用睡眠,延迟功能等。所有这些都会降低整个代码的速度,如下所示。仅当DoThis为True时,它才以所需的速度打印数字。仅当DoThat为True时,它也处于所需的速度。但是,当两者都运行时,睡眠适用于整个程序,显然不是解决方案,只是我需要做的例子。有没有一种方法可以减慢DoThis的输出速度,而没有其余代码/不允许其他代码同时运行?

我需要:
仅减慢DoThis输出
请勿更改UnchangeableValue
同时运行DoThis和DoThat功能

int main() {

    int True = 1;
    int UnchangebleValue = 1;

    int DoThis = 1;
    int DoThat = 1;

    while (DoThis >= True || DoThat <= True) {
        if (DoThis >= True) {
            DoThis += UnchangebleValue;
            cout << DoThis << endl;
            Sleep(1000); //Desired Effect, Needs to Apply Only Here
        }

        if (DoThat <= True) {
            DoThat -= UnchangebleValue;
            cout << DoThat << endl;
        }   
    }

    return 0;
}

编辑:这是我想使用线程建议完成的代码。如果有更好的方法可以做到这一点,我会全力以赴。谢谢您的答复。

#include <thread>
#include <iostream>

int main() {

    int True = 1;
    int UnchangebleValue = 1;

    int DoThis = 1;
    int DoThat = 1;

    std::thread t1([&DoThis, &DoThat, &UnchangebleValue, True]() {
        while (DoThis >= True ) {   
                DoThis += UnchangebleValue;
                std::cout << DoThis << std::endl;
                std::this_thread::sleep_for(std::chrono::milliseconds(1000));
        }
    });

    std::thread t2([&DoThis, &DoThat, &UnchangebleValue, True]() {
        while (DoThat <= True) {
                DoThat -= UnchangebleValue;
                std::cout << DoThat << std::endl;
                std::this_thread::sleep_for(std::chrono::milliseconds(10000));
        }       
    });

    t1.join();
    t2.join();

    return 0;
}

1 个答案:

答案 0 :(得分:0)

我真的无法理解您的总体目标或逻辑。

但是,如果您希望两段代码独立运行,则可以使用线程。从C ++ 11,您可以使用std :: thread以标准方式进行操作。我更改了代码以使其在线程中运行(不了解目标)。我用了lambda。

#include <thread>
#include <iostream>

int main() {

    int True = 1;
    int UnchangebleValue = 1;

    int DoThis = 1;
    int DoThat = 1;

    std::thread t1([&DoThis, &DoThat, &UnchangebleValue, True]() {
        while (DoThis >= True || DoThat <= True) {
            if (DoThis >= True) {
                DoThis += UnchangebleValue;
                std::cout << DoThis << std::endl;
                std::this_thread::sleep_for(std::chrono::milliseconds(1000));
            }}
        });

    std::thread t2([&DoThis, &DoThat, &UnchangebleValue, True]() {
        if (DoThat <= True) {
            DoThat -= UnchangebleValue;
            std::cout << DoThat << std::endl;
        }});

    t1.join();
    t2.join();

    return 0;
}

请注意,上面的代码中没有同步。在真实的项目中,您需要原子值和/或互斥量(互斥量)。