以任何方式同时运行2个循环
any way to run 2 loops at the same time?
我想为银行队列创建一个c++程序。每3分钟就有一位新客户进入队列。每位客户需要5分钟的服务时间。程序在的前30分钟后打印出信息
- 每位客户到达的时间
- 每位客户离开的时间
- 排队的顾客有多少
- 目前的服务客户是谁
我写了当前代码:
#include <queue>
#include <ctime>
#include <time.h>
#include <conio.h>
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
queue <int> inq;
queue <int> inservice;
int z= 1;
for(int i=0; i<=9; i++)
{
inq.push(z);
Sleep(180000);
_strtime_s(hold_time);
cout<<"Time of arriving for customer number "<<z<<" is: "<<hold_time<<endl;
z++;
}
do
{
inservice.push(inq.front());
Sleep(300000);
_strtime_s(hold_time);
cout<<"Time of leaving for customer number "<<z<<" is: "<<hold_time<<endl;
inq.pop();
}
while(!inq.empty());
cout<<"number of customers waiting : "<<inq.size()<<endl;
cout<<"Customer number "<<inservice.front()<< " is currently serving"<<endl;
return 0;
}
当前代码逐行执行;在队列循环完成之前,客户不会被转移到服务中。为了调整时间,我必须同时运行两个循环。使得客户在向其他客户提供服务的同时进入队列
有什么建议吗?
要同时运行两个循环,需要将它们放在不同的线程中。也许从这里开始了解线程。
如果你想要一个银行排队的模拟器,你可以考虑使用SimPy在Python中实现它。银行队列就是其中一个例子:SimPy银行示例
您需要一个更复杂的代码体系结构。要么是天真的线程,要么是在main
中有一个繁忙循环并根据需要定期(基于定时器和事件)调用其他函数的事件调度框架。
你能做的最基本但最稳健的解决方案是让一个循环快速迭代(使用非常小的sleep
),反复检查时间,看看是否到了执行任何操作的时候。这些行动将包括客户到达和客户离开。
在其他任何情况下使用sleep
,通常是糟糕设计的标志。
一种复杂的方法确实会使用线程,但如果你不想这样做,你应该随着时间的推移循环,即
for (int minutes = 1; mintues <= 30; minutes++) {
// if minutes modulo 3 do something
// if minutes modulo 5 do something
}
你可以循环几秒钟、几微秒等等。
相关文章:
- 您可以在没有线程的情况下同时运行多个 ISR 吗?
- 如何一次运行3个函数?
- GTest - 在不同的参数上运行多个测试用例
- 有没有办法一次运行 3 个创建窗口函数?
- fork/pipes和运行多个程序
- 从Qt/C++-App并行运行两个Lua函数
- 为同一向量C++运行多个线程时出现分段错误
- 如何使用boost.thread运行多个接收器,每个线程应该分配给每个接收器?
- 如何在codelite中运行多个程序
- 如何使用 Turbo C++并行运行两个功能,一个用于键盘,一个用于鼠标?
- 如何在 Linux 中同时运行多个 shell 命令
- 在C++中,如何同时运行两个语法命令?
- C++ 运行多个类函数
- 如何使用相同的可执行文件在后台运行 3 个 QProcess
- 如何同时在Clion中同时运行多个辩论者
- 如何使用gnu_parallal以运行多个可执行文件和/或bash脚本
- 这是否有意义,我的计算机只能并行运行4个线程
- 如何在 C++ 中使用一个 System() 函数运行 2 个命令
- 在Qt中,我如何成功运行两个查询
- 基于标志运行两个不同的函数