以任何方式同时运行2个循环

any way to run 2 loops at the same time?

本文关键字:运行 2个 循环 任何方 何方      更新时间:2023-10-16

我想为银行队列创建一个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
}

你可以循环几秒钟、几微秒等等。