我尝试使用睡眠,延迟功能等。所有这些都会降低整个代码的速度,如下所示。仅当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;
}
答案 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;
}
请注意,上面的代码中没有同步。在真实的项目中,您需要原子值和/或互斥量(互斥量)。