1111using namespace System ;
1212using namespace System ::Windows::Forms;
1313
14- std::ofstream logFile ( " log.txt " );
14+
1515
1616[STAThreadAttribute]
1717void main (array<String^>^ args)
@@ -21,10 +21,33 @@ void main(array<String^>^ args)
2121 Application::EnableVisualStyles ();
2222 ModelingSystemInfiniteQueue::ModelingInfinityQeueForm form;
2323 Application::Run (% form);
24-
2524}
2625
2726
27+ System::Void ModelingSystemInfiniteQueue::ModelingInfinityQeueForm::setTextForLabelEveryMachine (System::Windows::Forms::Label^ curLabel, int const & totalTimeExectuionTasksCurPC, int const & totalTimeWaitCurPC, int const & totalTimeQueueCurPC, int const & maxCountTaskInQueueCurPC,int const & maxTimeCurrentQueueCurPC)
28+ {
29+ curLabel->Text = " Âðåìÿ íà âûïîëíåíèå âñåõ çàäà÷: " + (totalTimeExectuionTasksCurPC / 60 ).ToString () + " ÷. " + (totalTimeExectuionTasksCurPC % 60 ).ToString () + " ìèí.\n "
30+ + " Âðåìÿ ïðîñòîÿ: " + (totalTimeWaitCurPC / 60 ).ToString () + " ÷. " + (totalTimeWaitCurPC % 60 ).ToString () + " ìèí. \n "
31+ + " Âñå âðåìÿ îæèäàíèÿ â î÷åðåäè: " + (totalTimeQueueCurPC / 60 ).ToString () + " ÷. " + (totalTimeQueueCurPC % 60 ).ToString () + " ìèí. \n "
32+ + " Ìàêñèìàëüíîå âðåìÿ î÷åðåäè: " + (maxTimeCurrentQueueCurPC / 60 ).ToString () + " ÷. " + (maxTimeCurrentQueueCurPC % 60 ).ToString () + " ìèí. \n "
33+ " Ìàêñ î÷åðåäü: " + maxCountTaskInQueueCurPC.ToString ();
34+ if (totalTimeExectuionTasksCurPC == 0 )
35+ curLabel->Text += " \n Ýôôåêòèâíîñòü ÝÂÌ 0%. \n Íå èñïîëüçóåòñÿ, ðåêîìåíäóåòñÿ ïîâûñèòü\n âåðîÿòíîñòü ïîïàäàíèÿ." ;
36+ else
37+ {
38+ if (totalTimeExectuionTasksCurPC == totalTimeWaitCurPC)
39+ curLabel->Text += " \n Ýôôåêòèâíîñòü ÝÂÌ 50%. \n Èñïîëüçóåòñÿ ëèøü íà ïîëîâèíó, \n ñëåäóåò ïîâûñèòü âåðîÿòíîñòü ïîïàäàíèÿ." ;
40+ else
41+ if (maxTimeCurrentQueueCurPC > totalTimeExectuionTasksCurPC * 0.3 )
42+ curLabel->Text += " \n Ýôôåêòèâíîñòü ÝÂÌ âûøå ñðåäíåãî. \n Äîëãîå âûïîëíåíèå, \n ðåêîìåíäóåòñÿ ïîíèçèòü âåðîÿòíîñòü ïîïàäàíèÿ\n èëè óìåíüøèòü âðåìÿ âûïîëíåíèÿ." ;
43+ else
44+ if (totalTimeWaitCurPC > totalTimeExectuionTasksCurPC * 0.5 )
45+ curLabel->Text += " \n Ýôôåêòèâíîñòü ÝÂÌ íèçêàÿ. \n Ñëèøêîì äîëãèé ïðîñòîé, \n ñëåäóåò ïîâûñèòü âåðîÿòíîñòü ïîïàäàíèÿ." ;
46+ else
47+ curLabel->Text += " \n Ýôôåêòèâíîñòü ÝÂÌ íîðìàëüíàÿ. \n Èñïîëüçóåòñÿ â ïðåäåëàõ íîðìû." ;
48+ }
49+ }
50+
2851System::Void ModelingSystemInfiniteQueue::ModelingInfinityQeueForm::Tb_startInteervalGetTask_KeyPress (System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e)
2952{
3053 if (checkInput (e))
@@ -131,7 +154,7 @@ int giveNumberPC(double const& prob1, double const& prob2)
131154void completeTask (std::vector<double >& listTaskCurPC, int & timeExectuionTaskCurPC, int & totalTimeExecutionPC, int & countCompleteTask)
132155{
133156
134- totalTimeExecutionPC += timeExectuionTaskCurPC;// std::round(listTaskCurPC[0]);//timeExectuionTaskCurPC
157+ totalTimeExecutionPC += timeExectuionTaskCurPC;
135158 countCompleteTask++;
136159
137160 std::reverse (listTaskCurPC.begin (), listTaskCurPC.end ());
@@ -150,13 +173,22 @@ void saveSizeQueueIfExists(int const& countTask, int& maxQueue)
150173 maxQueue = countTask - 1 ;
151174}
152175
153- void calculateTimeInQueue (int const & countTask, int & timeInQueue)
176+ void calculateTimeInQueue (int const & countTask, int & timeInQueue, int & timeCurrentQueue , int & maxTimeCurrentQueueCurPC )
154177{
155178 if (countTask > 1 )
179+ {
156180 timeInQueue++;
181+ timeCurrentQueue++;
182+ }
183+ else
184+ {
185+ if (timeCurrentQueue > maxTimeCurrentQueueCurPC)
186+ maxTimeCurrentQueueCurPC = timeCurrentQueue;
187+ timeCurrentQueue = 0 ;
188+ }
157189}
158190
159- void checkWorkPC (std::vector<double > & listTaskCurPC, int & timeExectuionTaskCurPC, int & totalTimeExecutionPC, int & countCompleteTask, int & maxQueue, int & timeInQueue, int & timeWait)
191+ void checkWorkPC (std::vector<double > & listTaskCurPC, int & timeExectuionTaskCurPC, int & totalTimeExecutionPC, int & countCompleteTask, int & maxQueue, int & timeInQueue, int & timeWait, int & timeCurrentQueue, int & maxTimeCurrentQueueCurPC )
160192{
161193 if (listTaskCurPC.size () != 0 )
162194 {
@@ -166,10 +198,9 @@ void checkWorkPC(std::vector<double> & listTaskCurPC, int& timeExectuionTaskCurP
166198 {
167199 timeExectuionTaskCurPC++;
168200 saveSizeQueueIfExists (listTaskCurPC.size (), maxQueue);
169- calculateTimeInQueue (listTaskCurPC.size (), timeInQueue);
201+ calculateTimeInQueue (listTaskCurPC.size (), timeInQueue,timeCurrentQueue,maxTimeCurrentQueueCurPC );
170202
171203 }
172- // totalTimeExecutionPC++;
173204 }
174205 if (listTaskCurPC.size () == 0 )
175206 timeWait++;
@@ -193,6 +224,8 @@ void correctTime(int const& totalTimeWork, int& totalTimeWorkCurMachine)
193224
194225System::Void ModelingSystemInfiniteQueue::ModelingInfinityQeueForm::Btn_exectuion_Click (System::Object^ sender, System::EventArgs^ e)
195226{
227+ std::ofstream logFile (" log.txt" );
228+
196229 int countTask = Convert::ToInt32 (numericUpDown1->Text );
197230 double const startInterrvalGetTask = Convert::ToDouble (tb_startInteervalGetTask->Text ->Replace (" ." , " ," ));
198231 double const endInteervalGetTask = Convert::ToDouble (tb_endInteervalGetTask->Text ->Replace (" ." , " ," ));
@@ -218,13 +251,13 @@ System::Void ModelingSystemInfiniteQueue::ModelingInfinityQeueForm::Btn_exectuio
218251 std::vector<double > listTimeExecutionTasksSecondPC; // ñîäåðæèò âðåìÿ âûïîëíåíèÿ êàæäîãî çàäàíèÿ 2 ÝÂÌ
219252 std::vector<double > listTimeExecutionTasksThirdPC; // ñîäåðæèò âðåìÿ âûïîëíåíèÿ êàæäîãî çàäàíèÿ 3 ÝÂÌ
220253
221- // Îáùåå âðåìÿ âûïîëíåíèÿ è êîëè÷åñòâî 1 ÝÂÌ
254+ // Îáùåå âðåìÿ âûïîëíåíèÿ çàäà÷ è êîëè÷åñòâî 1 ÝÂÌ
222255 int totalTimeExectuionTasksFristPC = 0 ;
223256 int countCompleteTaskFirstPC = 0 ;
224- // Îáùåå âðåìÿ âûïîëíåíèÿ è êîëè÷åñòâî 2 ÝÂÌ
257+ // Îáùåå âðåìÿ âûïîëíåíèÿ çàäà÷ è êîëè÷åñòâî 2 ÝÂÌ
225258 int totalTimeExectuionTasksSecondPC = 0 ;
226259 int countCompleteSecondPC = 0 ;
227- // Îáùåå âðåìÿ âûïîëíåíèÿ è êîëè÷åñòâî 3 ÝÂÌ
260+ // Îáùåå âðåìÿ âûïîëíåíèÿ çàäà÷ è êîëè÷åñòâî 3 ÝÂÌ
228261 int totalTimeExectuionTasksThirdPC = 0 ;
229262 int countCompleteThirdPC = 0 ;
230263
@@ -248,6 +281,11 @@ System::Void ModelingSystemInfiniteQueue::ModelingInfinityQeueForm::Btn_exectuio
248281 int maxTimeQueueSecondPC = 0 ;
249282 int maxTimeQueueThirdPC = 0 ;
250283
284+ // Âðåìÿ äëÿ êàæäîé îòäåëüíîé î÷åðåäè äëÿ ïîèñêà ñàìîé äîëãîé î÷åðåäè
285+ int timeCurrentQueueFirstPC = 0 ;
286+ int timeCurrentQueueSecondPC = 0 ;
287+ int timeCurrentQueueThridPC = 0 ;
288+
251289 // Ìàêñèìàëüíàÿ î÷åðåäü êàæäîé ÝÂÌ
252290 int maxCountTaskInQueueFirstPC = 0 ;
253291 int maxCountTaskInQueueSecondPC = 0 ;
@@ -257,9 +295,8 @@ System::Void ModelingSystemInfiniteQueue::ModelingInfinityQeueForm::Btn_exectuio
257295 double totalTimeReceiptsTasks = 0 ;
258296
259297 double timeBeforeNextTask = getRandom_uniformRealDistribution (startInterrvalGetTask, endInteervalGetTask);
260- double currentTime = 0 ;// timeBeforeNextTask;
261- int totalTimeWork = 0 ;// std::round(timeBeforeNextTask);
262- // label4->Text = "1 task get : " + totalTimeWork.ToString();
298+ double currentTime = 0 ;
299+ int totalTimeWork = 0 ;
263300 while (true )
264301 {
265302 if (currentTime >= timeBeforeNextTask && countTask > 0 )
@@ -309,15 +346,15 @@ System::Void ModelingSystemInfiniteQueue::ModelingInfinityQeueForm::Btn_exectuio
309346 {
310347 currentTimeExecutionFirstPC++;
311348 saveSizeQueueIfExists (listTimeExecutionTasksFirstPC.size (), maxCountTaskInQueueFirstPC);
312- calculateTimeInQueue (listTimeExecutionTasksFirstPC.size (), totalTimeQueueFirstPC);
349+ calculateTimeInQueue (listTimeExecutionTasksFirstPC.size (), totalTimeQueueFirstPC,timeCurrentQueueFirstPC,maxTimeQueueFirstPC );
313350 }
314351
315352 }
316353 if (listTimeExecutionTasksFirstPC.size () == 0 )
317354 totalTimeWaitFirstPC++;
318355
319- checkWorkPC (listTimeExecutionTasksSecondPC, currentTimeExecutionSecondPC, totalTimeExectuionTasksSecondPC, countCompleteSecondPC, maxCountTaskInQueueSecondPC, totalTimeQueueSecondPC, totalTimeWaitSecondPC);
320- checkWorkPC (listTimeExecutionTasksThirdPC, currentTimeExecutionThirdPC, totalTimeExectuionTasksThirdPC, countCompleteThirdPC, maxCountTaskInQueueThirdPC, totalTimeQueueThirdPC, totalTimeWaitThirdPC);
356+ checkWorkPC (listTimeExecutionTasksSecondPC, currentTimeExecutionSecondPC, totalTimeExectuionTasksSecondPC, countCompleteSecondPC, maxCountTaskInQueueSecondPC, totalTimeQueueSecondPC, totalTimeWaitSecondPC,timeCurrentQueueSecondPC,maxTimeQueueSecondPC );
357+ checkWorkPC (listTimeExecutionTasksThirdPC, currentTimeExecutionThirdPC, totalTimeExectuionTasksThirdPC, countCompleteThirdPC, maxCountTaskInQueueThirdPC, totalTimeQueueThirdPC, totalTimeWaitThirdPC,timeCurrentQueueThridPC,maxTimeQueueThirdPC );
321358
322359 logFile << " First PC : \n " ;
323360 logFile << " totalTimeExectuionTasksFristPC = " << totalTimeExectuionTasksFristPC << " totalTimeWaitFirstPC = " << totalTimeWaitFirstPC << " currentTimeExecutionFirstPC =" << currentTimeExecutionFirstPC << " \n " ;
@@ -337,30 +374,34 @@ System::Void ModelingSystemInfiniteQueue::ModelingInfinityQeueForm::Btn_exectuio
337374
338375 }
339376
340- /* correctTime(totalTimeWork, totalTimeExectuionTasksFristPC);
341- correctTime(totalTimeWork, totalTimeExectuionTasksSecondPC);
342- correctTime(totalTimeWork, totalTimeExectuionTasksThirdPC);
343- */
344- lbl_answer->Text = " Îáùåå âðåìÿ ðàáîòû : " + (totalTimeWork /60 ).ToString () + " ÷. " + (totalTimeWork % 60 ).ToString () + " ìèí." ;
345-
346- lbl_answer1->Text = " ÝÂÌ 1: Îáùåå âðåìÿ íà âûïîëíåíèå âñåõ çàäà÷: " + (totalTimeExectuionTasksFristPC/60 ).ToString () + " ÷. " + (totalTimeExectuionTasksFristPC% 60 ).ToString () + " ìèí."
347- + " Âðåìÿ ïðîñòîÿ: " + (totalTimeWaitFirstPC / 60 ).ToString () + " ÷. " + (totalTimeWaitFirstPC % 60 ).ToString () + " ìèí. "
348- +" Âñå âðåìÿ îæèäàíèÿ â î÷åðåäè: " + (totalTimeQueueFirstPC / 60 ).ToString () + " ÷. " + (totalTimeQueueFirstPC % 60 ).ToString () + " ìèí. " +
349- " Ìàêñ î÷åðåäü: " + maxCountTaskInQueueFirstPC.ToString ();
350-
351- lbl_answer2->Text = " ÝÂÌ 2: Îáùåå âðåìÿ íà âûïîëíåíèå âñåõ çàäà÷: " + (totalTimeExectuionTasksSecondPC/60 ).ToString () + " ÷. " + (totalTimeExectuionTasksSecondPC % 60 ).ToString () + " ìèí." +
352- " Âðåìÿ ïðîñòîÿ: " + (totalTimeWaitSecondPC / 60 ).ToString () + " ÷. " + (totalTimeWaitSecondPC % 60 ).ToString () + " ìèí"
353- +" Âñå âðåìÿ îæèäàíèÿ â î÷åðåäè: " + (totalTimeQueueSecondPC / 60 ).ToString () + " ÷. " + (totalTimeQueueSecondPC % 60 ).ToString () + " ìèí. " +
354- " Ìàêñ î÷åðåäü: " + maxCountTaskInQueueSecondPC.ToString ();
355-
356- lbl_answer3->Text = " ÝÂÌ 3: Îáùåå âðåìÿ íà âûïîëíåíèå âñåõ çàäà÷: " + (totalTimeExectuionTasksThirdPC/60 ).ToString () + " ÷. " + (totalTimeExectuionTasksThirdPC% 60 ).ToString () + " ìèí. " +
357- " Âðåìÿ ïðîñòîÿ: " + (totalTimeWaitThirdPC / 60 ).ToString () + " ÷. " + (totalTimeWaitThirdPC % 60 ).ToString () + " ìèí"
358- +" Âñå âðåìÿ îæèäàíèÿ â î÷åðåäè: " + (totalTimeQueueThirdPC / 60 ).ToString () + " ÷. " + (totalTimeQueueThirdPC % 60 ).ToString () + " ìèí. " +
359- " Ìàêñ î÷åðåäü: " + maxCountTaskInQueueThirdPC.ToString ();
360-
361- lbl_answer4->Text = " Âñå âðåìÿ â î÷åðåäè: " + ((totalTimeQueueFirstPC+totalTimeQueueSecondPC+totalTimeQueueThirdPC)/60 ).ToString () + " ÷. " + ((totalTimeQueueFirstPC + totalTimeQueueSecondPC + totalTimeQueueThirdPC) % 60 ).ToString () + " ìèí." ;
362- lbl_answer5->Text = " Âñå âðåìÿ â ïðîñòîå: " + ((totalTimeWaitFirstPC+totalTimeWaitSecondPC+totalTimeWaitThirdPC)/ 60 ).ToString () + " ÷. " + ((totalTimeWaitFirstPC + totalTimeWaitSecondPC + totalTimeWaitThirdPC) % 60 ).ToString () + " ìèí." ;
363- lbl_answer6->Text = " Âñå âðåìÿ ïîñòóïëåíèÿ çàäà÷: " + (((int )std::round (totalTimeReceiptsTasks)) / 60 ).ToString () + " ÷. " + (static_cast <int >(std::round (totalTimeReceiptsTasks)) % 60 ).ToString () + " ìèí." ;
377+
378+ setTextForLabelEveryMachine (lbl_FirstPC, totalTimeExectuionTasksFristPC, totalTimeWaitFirstPC, totalTimeQueueFirstPC, maxCountTaskInQueueFirstPC,maxTimeQueueFirstPC);
379+ setTextForLabelEveryMachine (lbl_SecondPC, totalTimeExectuionTasksSecondPC, totalTimeWaitSecondPC, totalTimeQueueSecondPC, maxCountTaskInQueueSecondPC,maxTimeQueueSecondPC);
380+ setTextForLabelEveryMachine (lbl_ThirdPC, totalTimeExectuionTasksThirdPC, totalTimeWaitThirdPC, totalTimeQueueThirdPC, maxCountTaskInQueueThirdPC,maxTimeQueueThirdPC);
381+
382+ int maxTimeQueuePC = std::max (maxTimeQueueThirdPC, std::max (maxTimeQueueFirstPC, maxTimeQueueSecondPC));
383+ int maxTimeWaitPC = std::max (totalTimeWaitFirstPC, std::max (totalTimeWaitSecondPC, totalTimeWaitThirdPC));
384+
385+ lbl_total->Text = " Îáùåå âðåìÿ ðàáîòû : " + (totalTimeWork / 60 ).ToString () + " ÷. " + (totalTimeWork % 60 ).ToString () + " ìèí." ;
386+ lbl_total->Text += " \n Îáùåå âðåìÿ îæèäàíèÿ â î÷åðåäè: " + ((totalTimeQueueFirstPC+totalTimeQueueSecondPC+totalTimeQueueThirdPC)/60 ).ToString () + " ÷. " + ((totalTimeQueueFirstPC + totalTimeQueueSecondPC + totalTimeQueueThirdPC) % 60 ).ToString () + " ìèí." ;
387+ lbl_total->Text += " \n Îáùåå âðåìÿ â ïðîñòîå: " + ((totalTimeWaitFirstPC+totalTimeWaitSecondPC+totalTimeWaitThirdPC)/ 60 ).ToString () + " ÷. " + ((totalTimeWaitFirstPC + totalTimeWaitSecondPC + totalTimeWaitThirdPC) % 60 ).ToString () + " ìèí." ;
388+ lbl_total->Text += " \n Âðåìÿ ïîñòóïëåíèÿ çàäà÷: " + (((int )std::round (totalTimeReceiptsTasks)) / 60 ).ToString () + " ÷. " + (static_cast <int >(std::round (totalTimeReceiptsTasks)) % 60 ).ToString () + " ìèí." ;
389+ lbl_total->Text += " \n Ñàìîå ìàêñ âðåìÿ î÷åðåäè: " + ((maxTimeQueuePC) / 60 ).ToString () + " ÷. " + ((maxTimeQueuePC) % 60 ).ToString () + " ìèí." ;
390+ lbl_total->Text += " \n Ñàìîå ìàêñ âðåìÿ ïðîñòîÿ: " + ((maxTimeWaitPC) / 60 ).ToString () + " ÷. " + ((maxTimeWaitPC) % 60 ).ToString () + " ìèí." ;
391+
392+
393+
394+
395+ lbl_total->Text += " \n\n Êðàòêàÿ ñâîäêà îá ýôôåêòèâíîñòè:\n ---\n " ;
396+ if (maxTimeQueuePC > totalTimeWork * 0.8 )
397+ lbl_total->Text += " Ìàêñ âðåìÿ î÷åðåäè áîëåå 80% îò âñåé ðàáîòû,\n ðåêîìåíäóåòñÿ ñíèçèòü íàãðóçêó\n ñ íàãðóæåííîé ÝÂÌ è ïîâûñèòü íà ìåíåå\n íàãðóæåííóþ \n (ñì. ñâîäêà äëÿ òåêóùåé ÝÂÌ)\n ---\n " ;
398+ else
399+ lbl_total->Text += " Ìàêñ âðåìÿ î÷åðåäè çàíèìàåò ìåíåå 80% âðåìåíè \n îò âñåé ðàáîòû, â ïðåäåëàõ íîðìû\n ---\n " ;
400+ if ((totalTimeWaitFirstPC + totalTimeWaitSecondPC + totalTimeWaitThirdPC) > totalTimeWork * 0.3 )
401+ lbl_total->Text += " Îáùåå âðåìÿ ïðîñòîÿ áîëåå 30% îò âñåé ðàáîòû, \n ÝÂÌ ïðàêòè÷åñêè íå ðàáîòàþò\n ---\n " ;
402+ else
403+ lbl_total->Text += " Îáùåå âðåìÿ ïðîñòîÿ ìåíåå 30% îò âñåé ðàáîòû \n ÝÂÌ ðàáîòàþò â ñòàáèëüíîì ðåæèìå\n ---\n " ;
404+
364405 logFile.close ();
365406}
366407
@@ -370,3 +411,5 @@ System::Void ModelingSystemInfiniteQueue::ModelingInfinityQeueForm::Tb_probabili
370411 e->Handled = true ;
371412}
372413
414+
415+
0 commit comments