21xrx.com
2024-11-08 21:21:49 Friday
登录
文章检索 我的文章 写文章
C++中断进度条实现
2023-06-24 13:58:39 深夜i     --     --
C++ 中断 进度条 实现

在C++编程过程中,经常需要添加进度条来显示程序运行的进度和状态。而对于长时间运行的程序或者大型数据处理任务,进度条就显得更加必要和实用了。但是要想实现一个自适应且实时更新的进度条,就需要考虑到如何进行中断和恢复操作。

实现方法

1.使用Windows.h头文件中的SetConsoleCursorPosition()函数,可以将光标移动到控制台窗口任意位置,并进行输出。

2.利用字符转义序列来进行控制台的操作,例如使用 \r 来实现一行输出局部更改,达到进度条的更新效果。

3.通过信号量实现进程的中断和恢复。可以使用signal()函数来设置信号量的操作,通过在程序的关键位置发送信号量,来实现代码的中断和恢复操作。


#include <iostream>

#include <Windows.h>

#include <csignal>

using namespace std;

volatile bool g_brunning = true;

void signalHandler(int sig)

  g_brunning = false;

int main()

{

  signal(SIGINT, signalHandler);

  int current = 0;

  int total = 100;

  while (g_brunning)

  {

    // 打印进度条

    printf("progress:[");

    for (int i = 0; i <= current; ++i)

    {

      printf("#");

    }

    for (int i = current + 1; i < total; ++i)

    {

      printf(" ");

    }

    printf("] [%d%%]\r", (current) * 100 / total);

    Sleep(1000);

    current++;

    if (current >= total)

    

      break;

    

  }

  cout << endl;

  return 0;

}

上述代码中,我们使用了 volatile bool 类型的变量 g_brunning 来标志程序的运行状态。当程序在运行过程中,可以通过按下Ctrl+C的方式来向信号处理函数 signalHandler() 发送信号量,实现程序的中断。在进度条的更新过程中,我们实时输出当前进度的百分比,并将进度条在控制台进行打印。通过在进度条打印结束后使用换行符 \n 来换行,使打印结果更加清晰可读。

总结

以上是利用中断来实现C++进度条的相关编程实现。通过使用字符转义序列、Windows.h头文件的函数和信号量,我们可以实现自适应的且实时更新的进度条效果。对于长时间运行的程序,进度条不仅可以提高代码的可读性和易用性,还可以更好地方便用户对程序的运行情况进行监控和统计。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复