gpt4 book ai didi

c++ - 如何与程序的其余部分同时显示计时器?

转载 作者:行者123 更新时间:2023-12-04 14:06:02 33 4
gpt4 key购买 nike

所以我一直在做一个基于终端的测验作为我的第一年项目,我决定显示一个计时器和代码,但计时器不会让程序继续执行,因为计时器中使用了无限循环。
我该如何解决这个问题?

    void timer()
{
while (true) {
clock_display();//Function loaded with manipulators to just show the 00:00:00 interface
sleep(1);
sec++;
if (sec == 60) {
mins++;
if (mins == 60) {
hrs++;
mins = 0;
}
sec = 0;
}
}
}

int main(){
timer();
//Other code I have to run
}

最佳答案

这个问题看起来更困难。你希望同一个程序同时做两件事。虽然这在当今很常见,而且大多数程序都是这样运行的,但这并不是一年级学生所期望的水平。
您需要的是并发编程,这应该是一件很难的事情。
所以这是我能想到的解决您问题的最简单示例。然而,并发困难:您需要参加特殊类(class)以了解这里发生的事情和原因。

#include <iostream>
#include <thread>
#include <cmath>

void timer()
{
int sec = 0;
while (true)
{
#pragma omp critical
std::cout << sec++ << "\n";

std::this_thread::sleep_for(std::chrono::duration<double>(1.0));
}
}

void my_stuff()
{
for (int i = 0; i < 100; i++)
{
double x = 0.0;
for (int j = 0; j < 10'000'000; j++)
{
x += sin(i + j);
}
#pragma omp critical
std::cout << "x = " << x << "\n";
}
}

int main()
{
#pragma omp parallel
#pragma omp sections
{
#pragma omp section
timer();
#pragma omp section
my_stuff();
}
}
将其编译为使用 OpenMP 的 C++ 程序:这是最简单的并发库。 Linux下:添加 -fopenmp对于编译器标志,对于其他操作系统,互联网上充满了答案。
  • 我用 #include<thread>只能运行 sleep_for让程序进入休眠状态。这是一种可移植的方式,但您可以使用其他方法。一般情况下,#include<thread>是 C++ 的并发方式,但我相信这对您来说可能太难了。
  • 那么你有所有这些#pragma s。这不是 OpenMP 教程的地方,请自行查找,它们很多。
  • critical pragma 引入了一个临界区来保护竞争线程共享的资源(此处:std::cout)。去找一个关于它的教程。
  • (两个)线程在 sections 中自动生成pragma,前提是程序已正确编译并在至少具有 2 个内核(物理或虚拟)的处理器上运行。
  • 要运行的线程由 section 标识pragma

  • 就是这样。我希望它对你有用。
    一旦它起作用,就找到一本关于 OpenMP 和/或 C++11 并发模型的好的教程/教科书。

    关于c++ - 如何与程序的其余部分同时显示计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68483888/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com