【问题标题】:any way to run 2 loops at the same time?有什么方法可以同时运行 2 个循环?
【发布时间】:2014-12-13 02:02:51
【问题描述】:

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

}

当前代码逐行执行;在队列循环完成之前,客户不会被转移到服务中。 要调整时间,我必须同时运行两个循环。这样客户在服务其他客户的同时进入队列

有什么建议吗?

【问题讨论】:

  • 您的程序将实时运行(30 分钟)?您可能需要重新考虑这一点,以便您的程序可以在不到一秒的时间内模拟将在 30 分钟内发生的事件。
  • 怎么做?你有什么具体的建议吗?

标签: c++ loops queue sleep ctime


【解决方案1】:

解决此问题的复杂方法确实会使用线程,但如果您不想这样做,则应该随着时间循环,即

for (int minutes = 1; mintues <= 30; minutes++) {
    // if minutes modulo 3 do something
    // if minutes modulo 5 do something
}

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

【讨论】:

    【解决方案2】:

    为此,您需要更复杂的代码架构。要么是简单的线程,要么是在 main 中有一个繁忙循环并定期(基于计时器和事件)根据需要调用其他函数的事件调度框架。

    您可以做的最基本但最强大的解决方案是让 一个 循环非常快速地迭代(使用非常小的 sleep),反复检查时间以查看是否该执行任何动作。这些行动将包括顾客到达和顾客离开。

    在其他任何情况下使用sleep,IMO,通常是糟糕设计的标志。

    【讨论】:

      【解决方案3】:

      要同时运行两个循环,您需要将它们放在不同的线程中。也许从here 开始了解线程。

      如果您想要一个银行排队模拟器,您可以考虑使用 SimPy 在 Python 中实现它。银行队列甚至是示例之一: SimPy Bank Example

      【讨论】:

      • 我的回答者建议一个事件调度框架——SimPy 是一个事件调度框架。
      猜你喜欢
      • 2020-03-06
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-13
      • 2012-11-19
      • 1970-01-01
      • 2011-07-29
      相关资源
      最近更新 更多