首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何与程序的其他部分同时显示计时器?

如何与程序的其他部分同时显示计时器?
EN

Stack Overflow用户
提问于 2021-07-22 11:17:42
回答 1查看 363关注 0票数 4

所以我做了一个基于终端的测试,作为我的第一年项目,我决定在代码中显示一个计时器,但是定时器不允许程序继续进行,因为计时器中使用的是无限循环。

我如何处理这个问题?

代码语言:javascript
运行
复制
    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
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-22 12:12:58

这个问题看上去更难。你想要同一个程序同时做两件事。虽然这是目前常见的情况,而且大多数程序都是这样运行的,但这并不是一年级学生所期望的水平。

你需要的是并发编程,应该是一件很难的事情。

这是我能想到的解决问题的最简单的例子。然而,并发性很难实现:您需要上一门特殊的课程来了解这里发生的事情和原因。

代码语言:javascript
运行
复制
#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();
    }
}

将其编译为使用C++的OpenMP程序:这是用于并发的最简单的库。在Linux:将-fopenmp添加到编译器标志中,对于其他操作系统,互联网上充满了答案。

  • 我使用#include<thread>只能运行sleep_for来使程序进入睡眠状态。这是一种可移植的方法,但您可以使用其他方法。一般来说,them.
  • critical是并发的C++方式,但我认为这对你来说可能太难了。
  • 那么你就拥有了所有的#pragma。这不是一个OpenMP教程的地方,你自己找吧,有大量的C++实用主义引入了一个关键部分来保护竞争线程共享的资源(这里是:std::cout)。如果程序已经正确编译并在至少有两个内核的处理器上运行(要运行的物理线程或virtual).
  • The线程由section

标识),则自动生成(两个)线程。

就这样。我希望它能对你有用。

一旦开始工作,就可以找到一本关于OpenMP和/或C++11并发模型的好教程/教科书。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68483888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档