2014-10-17 26 views
0

我想爲銀行隊列創建一個C++程序。每3分鐘一個新客戶進入隊列。每個客戶需要5分鐘的時間進行服務。該程序打印出的信息,第30分鐘任何方式來同時運行2個循環?

  • 後抵達的爲每一位客戶
  • 讓每個客戶
  • 有多少客戶是該行的時間的時間?
  • 誰是當前服務客戶?

我寫當前代碼:

#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; 

}

當前的代碼由行執行線;在隊列循環完成之前客戶不會被轉移到服務。 要調整時間,我必須同時運行兩個循環。使客戶在同一時間進入隊列其他服務人員

有什麼建議嗎?

+0

您的程序將實時運行(30分鐘)?您可能需要重新考慮,以便您的程序可以在幾分之一秒內模擬30分鐘內發生的事件。 – imran 2014-10-17 13:22:11

+0

如何做?你有建議的特定功能嗎? – 2014-10-17 13:34:21

回答

1

要同時運行兩個循環,您需要將它們置於不同的線程中。也許開始here來了解線程。

如果你想要一個銀行排隊模擬器,你可以考慮使用SimPy在Python中實現它。銀行隊列甚至是其中的一個例子: SimPy Bank Example

+0

我的同事回答者提出了一個事件調度框架 - SimPy是一個事件調度框架。 – 2014-10-17 13:51:33

1

您需要更復雜的代碼體系結構。要麼是天真的線程,要麼是一個在main中有一個繁忙循環的事件調度框架,並且定期(基於定時器和事件)根據需要調用其他函數。

你可以做最基本而可靠的解決方案是有一個循環迭代是非常迅速(一個非常小的sleep),反覆檢查的時間,看它是否是時候執行任何操作。這些行動將包括客戶抵達和客戶離開。

在其他任何情況下使用sleep IMO通常是壞設計的標誌。

1

一個複雜的方式來處理這的確會使用線程,但如果你不想這樣做,你應該隨着時間的推移而不是循環,即

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

你可以遍歷秒,毫秒,諸如此類的東西。