Skip to content

Commit 29e91bd

Browse files
#TDP - 3 Add info
Add info about work machine and add recommended for user
1 parent 73b2f96 commit 29e91bd

File tree

4 files changed

+2370
-525
lines changed

4 files changed

+2370
-525
lines changed

ModelingSystemInfiniteQueue/ModelingInfinityQeueForm.cpp

Lines changed: 83 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
using namespace System;
1212
using namespace System::Windows::Forms;
1313

14-
std::ofstream logFile("log.txt");
14+
1515

1616
[STAThreadAttribute]
1717
void 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+
2851
System::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)
131154
void 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

194225
System::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

Comments
 (0)