Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
#1

Почему программа компилируется но не работает? - C++

01.12.2012, 22:38. Просмотров 2498. Ответов 58
Метки нет (Все метки)

Заявки (телевизоры) поступают на проверку к 3 пунктам контроля . Если все контроллеры заняты , заявки встают в очередь . Если заявка пребывает в очереди больше 35 минут , она не обслуживается.
8-1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;
#include "List.h"     //подключение файла с описанием шаблона списка
 
int brak=0;           //счетчик случаев выбраковки изделий в пункте
                      //контроля
 
float que1_aver;      //переменная для подсчета средней длины очереди
                      //к пункту контроля
long int total;       //счетчик модельного времени (количество секунд)
long int completed;   //счетчик числа заявок, завершивших обслуживание
                      //(телевизоров, ушедших на упаковку)
long int entered;     //счетчик числа заявок, поступивших в систему
//Класс для представления заявок (телевизоров)
class TV
{
 long int id;         //уникальный идентификатор заявки
 int seconds;         //время, проведенное в системе
  public:
//Объявление классов Control и Debugger дружественными
 friend class Control;
 
 TV()                 //метод-конструктор
 {
  id=entered;         //какой по счету поступила заявка, такой
                      //и идентификатор
  seconds=0;
 }
  void Print();
  long int getId();
  int getTime();
   };
//Вывод содержимого объекта
void TV::Print()
 {
  printf("id=%ld\n проведено в системе=%d секунд\n", id, seconds); 
 }
//Чтение идентификатора заявки
 long int TV::getId()
 {
  return(id); 
 }
//Чтение проведенного в системе времени
 int TV::getTime()
 {
  return(seconds); 
 }
//Протокол класса Пункт_контроля
class Control
{
 int to_arrival;                 //время до прибытия следующей заявки извне
 int q_length;                   //текущая длина очереди
 ListNode<TV> *queue;            //список заявок, находящихся в очереди
 int *to_served;                 //массив времен, оставшихся до завершения
                                 //обслуживания заявки в каждом из каналов,
                                 //в случае простоя -1
 TV **serving;                   //массив указателей на заявки, находящиеся
                                 //на обслуживании в каналах, в случае
                                 //простоя канала NULL
 
  const static int arr1=42;     //минимальное время между прибытиями заявок
                                 //извне
  const static int arr2=55;     //максимальное время между прибытиями
                                 //заявок извне
  const static int serv1=60;    //минимальное время проверки телевизора
  const static int serv2=180;    //максимальное время проверки телевизора
  const static int volume=3;     //количество каналов (контролеров)
 
   public:
  Control();                     //конструктор
  ~Control();                    //деструктор
  void run();                    //диспетчер
  void arrival(TV *);           //прибытие телевизора на проверку
 
  void complete(int i);          //завершение проверки телевизора
  int busy();                    //вычисление числа занятых контролеров
 };
 
 
 
 
 Control::Control()//Конструктор для пункта контроля
 {
  int i;
  q_length=0;
  queue=NULL;
  //Розыгрыш интервала времени до прибытия заявки
  to_arrival=arr1+rand()%(arr2-arr1+1);
//Выделение памяти под массивы
  to_served=new int[volume];;
  serving=new TV *[volume];
//Инициализация массивов
  for(i=0;i<volume;i++)  to_served[i]=-1;
  for(i=0;i<volume;i++)  serving[i]=NULL;
 }
//Деструктор для пункта контроля
 Control::~Control()
 {
  delete[] to_served;
  delete [] serving;
 }
 //Вычисление числа занятых контролеров
 int Control::busy()
 {
  int i, k;
  k=0;
//Признак занятости: положительное время, оставшееся до завершения //Проверки телевизора
  for(i=0;i<volume;i++)
   if (to_served[i]>0) k++;
  return(k);
 }
//Прибытие телевизора для прохождения контроля 
 void Control::arrival(TV *)
 {
  int i,a;      
  TV *p;
  ListNode<TV> *ptr;
  
  
   entered++;                    //инкремент счетчика поступлений в систему
   p=new TV();                   //создание нового объекта-телевизора
//Розыгрыш нового интервала времени между поступлениями
   to_arrival=arr1+rand()%(arr2-arr1+1); 
  
  
 //Поиск свободного контролера
  for (i=0;i<volume;i++)
   if (to_served[i]==-1) break;
//Свободный контролер найден
 
  if (i<volume)
  {
  //Ставим телевизор к нему на обслуживание
      do {
   serving[i]=p;
   a=serving[i]->getTime();
  if (a>2100) brak++;}
  while (a<=2100);
//Разыгрываем время обслуживания
   to_served[i]=serv1+rand()%(serv2-serv1+1);
  }
  else                           //все контролеры заняты
  {
  //Создаем элемент списка для постановки телевизора в очередь
   ListNode<TV> *ptr=new ListNode<TV>(p,NULL);
 //Если очередь пуста, делаем его головой списка
   if (q_length==0) queue=ptr;
//иначе ставим в конец очереди (хвост списка)
   else ListAdd<TV>(queue,ptr);
   q_length++;                   //инкремент длины очереди
  }
  return;
 }
 //Завершение проверки телевизора i-м контролером
 void Control::complete(int i)
 {
  int a; 
 //Телевизор успешно прошел проверку
 
  
   completed++;                  //инкремент счетчика телевизоров,
                                 //покинувших систему
 
//Удаление объекта из системы
   delete serving[i]; 
  
  
 //Попытка загрузить освободившегося контролера
  if (q_length==0)               //очередь пуста
  {
 //Контролер объявляется простаивающим
   to_served[i]=-1; 
   serving[i]=NULL;
  }  
  else                           //очередь не пуста
  {
  //Извлекаем из очереди первый телевизор и ставим его на проверку
 do {
   serving[i]=queue->Data();
   a=serving[i]->getTime();
  if (a>2100) brak++;
 }
  while (a<=2100);  
      
//Разыгрываем время  проверки
   to_served[i]=serv1+rand()%(serv2-serv1+1);
//Головой списка-очереди становится следующий телевизор
   queue=queue->Next();
   q_length--;                   //декремент текущей длины очереди
  }
 }
//Метод-диспетчер 
 void Control::run()
 {
  int i; 
  float a; 
  ListNode<TV> *ptr;
//Декремент времени, оставшегося до завершения проверки каждым контролером
  for(i=0;i<volume; i++)
  {
   if (to_served[i]==-1) continue;   //контролер простаивает, декремент
                                     //не нужен
   --to_served[i];
//Вызов метода-обработчика, имитирующего завершение проверки
   if (to_served[i]==0) complete(i);  }
  to_arrival--;
//Вызов метода-обработчика, имитирующего прибытие нового телевизора
  if (to_arrival==0) arrival(NULL); 
 
//Инкремент длительности пребывания в системе для телевизоров, ожидающих 
  //проверки в очереди (если очередь не пуста)
  if (queue)
 
  {
   ptr=queue;
   while(ptr!=NULL)
  
    ((ptr->Data())->seconds)++;
    ptr=ptr->Next();
  }
 
 
  return;
 
}
8-2.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define N 259200  //общее время моделирования - 3-е суток
#include "8-1.h"
int main()
{
 
//Инициализация генератора случайных чисел
 srand((unsigned)time(0));
//Инициализация объектов
 Control c;
 
 for(total=0L;total<N;total++)
 {
  c.run();
  }
 
//Вывод на печать результатов имитационного эксперимента
 printf("Всего поступлений в систему %ld\n", entered);
 printf("Успешно прошли проверку %ld\n", completed);
 printf("Число неудачных проверок %d\n", brak);
 
 
system("pause");
}
List.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
template <class Type>
class ListNode  {
 private:
  ListNode<Type> *next;
  Type *data;
 public:
   ListNode(Type *d, ListNode<Type> *n); 
  ~ListNode();
  Type *Data();
  ListNode<Type> *Next();
  void  PutNext(ListNode<Type> *n);  
  void Print();
};
template <class Type>
ListNode<Type>::ListNode(Type *d, ListNode<Type> *n) : next(n), data(d)
{
}
template <class Type>
ListNode<Type>::~ListNode()
{
 delete data;
}
template <class Type>
Type *ListNode<Type>::Data()
{
 return data;
}
template <class Type>
ListNode<Type> *ListNode<Type>::Next()
{
 return next;
}
template <class Type>
void ListNode<Type>::PutNext(ListNode<Type> *n)
{
 next=n;
}
template <class Type>
void ListNode<Type>::Print()
{
 data->Print();
}
template <class Type>
void ListAdd(ListNode<Type> *head, ListNode<Type> *li)
{
 ListNode<Type> *old, *v;
 for (v=head; v!=NULL; v=v->Next())
  old=v;
 old->PutNext(li);
}
template <class Type>
ListNode<Type> *ListDelete(ListNode<Type> *head, ListNode<Type> *li)
{
 int j;
 ListNode<Type> *old, *o1;
 if (li==head)
 {
  o1=head->Next();
  delete li;
  return o1;
 }
 for (ListNode<Type>* v=head; v!=li; v=v->Next())
  old=v;
 o1=li->Next();
 old->PutNext(o1);
  delete li;
 return head;
}
template <class Type>
void ListPrint(ListNode<Type> *head)
{
 for (ListNode<Type>* v=head; v!=NULL; v=v->Next())
    v->Print();
 } 
template <class Type>
int ListCount(ListNode<Type> *head)
{
 int i; i=0;
 for (ListNode<Type>* v=head; v!=NULL; v=v->Next())
 {
   v->Print();
   i++;
 }
 return i;
}
Добавлено через 3 часа 48 минут
нашел ошибку
C++
1
2
3
4
5
do {
   serving[i]=p;
   a=serving[i]->getTime();
  if (a>2100) brak++;}
  while (a<=2100);
цикл неправильно работает .... но не пойму почему..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 22:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему программа компилируется но не работает? (C++):

Почему Visual Studio показывает ошибку, но программа компилируется и работает? - C++
template &lt;typename T&gt; struct MyType { friend std::ostream &amp;operator&lt;&lt;(std::ostream &amp;out, const MyType&lt;T&gt; &amp;object) { out &lt;&lt;...

почему не компилируется программа ? - C++
почему не компилируется ? ( #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; using namespace...

Почему не компилируется программа ? ( Русская рулетка ) - C++
Написана на с++ в Visual Studio 2017. Не могли бы подсказать почему не компилируется приведённая ниже программа ? #include &lt;iostream&gt; ...

Как работает данный код? И почему не компилируется? - C++
Обьясните пожалуйста как работает данный код, и скажите почему он не компилируется? И есть ли способ считать числа еще быстрее? ...

Программа компилируется но не работает - C++
#include &lt;conio.h&gt; #include&lt;windows.h&gt; #include&lt;iostream&gt; #include&lt;time.h&gt; using namespace std; int main() { setlocale(0,...

Программа компилируется но не работает - C++
После ввода программа не выдает нечего и закрывается:cry: #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;cstring&gt; using...

58
mrmaster88
42 / 42 / 3
Регистрация: 13.04.2012
Сообщений: 112
02.12.2012, 00:15 #2
Цитата Сообщение от galaxyblazer Посмотреть сообщение
if (a>2100) brak++;}
* while (a<=2100);
цикл при a>2100 выполнится 1 раз
0
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
02.12.2012, 12:04  [ТС] #3
тут не только это...похоже что в переменную "а" я не передаю время пребывания в очереди... сейчас думаю как решить это...

Добавлено через 11 часов 34 минуты
ни такой вариант:
C++
1
2
3
4
5
6
7
8
//Свободный контролер найден
  if (i<volume)
  {
      
  //Ставим телевизор к нему на обслуживание
      if (((ptr->Data())->seconds)<=2100){serving[i]=p;}else
      {brak++;
      delete serving[i];}
ни вариант с циклом не проходит ... проект компилируется но сразу после запуска вылетает ошибка:
Run-Time Check Failure #3 - The variable 'ptr' is being used without being initialized.
0
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
02.12.2012, 12:14  [ТС] #4
вот файл с проектом VS 2008 где просто подаются на обработку заявку без какого либо условия т.е.:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
if (i<volume)
  {
      
  //Ставим телевизор к нему на обслуживание
     // if (((ptr->Data())->seconds)<=2100){
          serving[i]=p;
      /*}else
      {brak++;
      delete serving[i];}*/
    
  
//Разыгрываем время обслуживания
   to_served[i]=serv1+rand()%(serv2-serv1+1);
  }
0
Вложения
Тип файла: rar qq1.rar (248.7 Кб, 7 просмотров)
dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
02.12.2012, 12:21 #5
119 строка, у вас
C++
1
ListNode<TV> *ptr;
переменная создана но не инициализирована, но ет лиш варнинг, у вас же есть переменная олд в цикле
C++
1
2
3
4
5
6
7
8
9
void ListAdd(ListNode<Type> *head, ListNode<Type> *li)
{
    ListNode<Type> *old, *v;
    for (v=head, old = v; v!=NULL; v=v->Next())
    {
        old = v;
    }
    old->PutNext(li);
}
сделайте у мя компилятор на сие заругался. А что у вас с ptr просто так сказать не могу добавьте ваш обновленный код. И можно спросить когда ваша программа завершит выполнение, а то как то страшно запускать вероятны утечки памяти)

Добавлено через 1 минуту
в том файле проблем не увидил только варнинги разве у вас установлено принимать варнинги за ерроры?
0
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
02.12.2012, 12:45  [ТС] #6
Цитата Сообщение от dederkay Посмотреть сообщение
сделайте у мя компилятор на сие заругался. А что у вас с ptr просто так сказать не могу добавьте ваш обновленный код. И можно спросить когда ваша программа завершит выполнение, а то как то страшно запускать вероятны утечки памяти)

Добавлено через 1 минуту
в том файле проблем не увидил только варнинги разве у вас установлено принимать варнинги за ерроры?
нет. компилируется она без проблем, все проблемы начинаются когда запустить программу... а именно с вот таким кодом в месте где заявка из очереди поступает на обработку:
C++
1
2
3
4
5
6
7
8
//Свободный контролер найден
  if (i<volume)
  {
      
  //Ставим телевизор к нему на обслуживание
      if (((ptr->Data())->seconds)<=2100){serving[i]=p;}else
      {brak++;
      delete serving[i];}
на ваш вариант у меня компилятор не ругается но все равно та же ошибка: Run-Time Check Failure #3 - The variable 'ptr' is being used without being initialized.

или может я вас не понял...
0
dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
02.12.2012, 12:52 #7
проблема в том что инициализация
C++
1
ptr=queue;
делается после определенного условия, по сему, вероятно на момент выполнения того кусочка кода, может быть и не инициализированной переменной.
0
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
02.12.2012, 13:04  [ТС] #8
ну вот я инициализировал :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
void Control::arrival(TV *)
 {
  int i,a;      
  TV *p;
  ListNode<TV> *ptr;
  
  
   entered++;                    //инкремент счетчика поступлений в систему
   p=new TV();                   //создание нового объекта-телевизора
//Розыгрыш нового интервала времени между поступлениями
   to_arrival=arr1+rand()%(arr2-arr1+1); 
  
  
 //Поиск свободного контролера
  for (i=0;i<volume;i++)
   if (to_served[i]==-1) break;
//Свободный контролер найден
ptr=queue;
  if (i<volume)
  {
  //Ставим телевизор к нему на обслуживание
 if (((ptr->Data())->seconds)<=2100){
          serving[i]=p;
     }else
      {brak++;
      delete serving[i];}
//Разыгрываем время обслуживания
   to_served[i]=serv1+rand()%(serv2-serv1+1);
  }
Выдало ошибку после запуска :Необработанное исключение в "0x00a32276" в "qq1.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000004".
и указало желтой стрелочкой на это:
C++
1
2
3
4
5
template <class Type>
Type *ListNode<Type>::Data()
{
---> return data;
}
0
dederkay
34 / 34 / 0
Регистрация: 08.12.2010
Сообщений: 161
02.12.2012, 13:30 #9
не уверен что логика программы сохраниться но почему б не сделать вот так вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
void Control::arrival(TV *)
{
    ListNode<TV> *ptr;
    int i,a;      
    TV *p;
 
 
    entered++;                    //инкремент счетчика поступлений в систему
    p=new TV();                   //создание нового объекта-телевизора
    //Розыгрыш нового интервала времени между поступлениями
    to_arrival=arr1+rand()%(arr2-arr1+1); 
 
 
    if (queue)
    {
        ptr=queue;
        while(ptr!=NULL)
        {
            ((ptr->Data())->seconds)++;
            ptr=ptr->Next();
        }
        for (i=0;i<volume;i++)
    {
        if (to_served[i]==-1)
        {
            break;
        }
    }
    //Свободный контролер найден
    if (i<volume)
    {
 
        //Ставим телевизор к нему на обслуживание
        if (((ptr->Data())->seconds)<=2100)
        {
            serving[i]=p;
        }
        else
        {
            brak++;
            delete serving[i];
        }
 
 
        //Разыгрываем время обслуживания
        to_served[i]=serv1+rand()%(serv2-serv1+1);
    }
    else                           //все контролеры заняты
    {
        //Создаем элемент списка для постановки телевизора в очередь
        ListNode<TV> *ptr=new ListNode<TV>(p,NULL);
        //Если очередь пуста, делаем его головой списка
        if (q_length==0) queue=ptr;
        //иначе ставим в конец очереди (хвост списка)
        else ListAdd<TV>(queue,ptr);
        q_length++;                   //инкремент длины очереди
    }
    }
    //Поиск свободного контролера
    
    return;
}
и проблемы не будет
0
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
02.12.2012, 13:39  [ТС] #10
Цитата Сообщение от dederkay Посмотреть сообщение
не уверен что логика программы сохраниться но почему б не сделать вот так вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
void Control::arrival(TV *)
{
    ListNode<TV> *ptr;
    int i,a;      
    TV *p;
 
 
    entered++;                    //инкремент счетчика поступлений в систему
    p=new TV();                   //создание нового объекта-телевизора
    //Розыгрыш нового интервала времени между поступлениями
    to_arrival=arr1+rand()%(arr2-arr1+1); 
 
 
    if (queue)
    {
        ptr=queue;
        while(ptr!=NULL)
        {
            ((ptr->Data())->seconds)++;
            ptr=ptr->Next();
        }
        for (i=0;i<volume;i++)
    {
        if (to_served[i]==-1)
        {
            break;
        }
    }
    //Свободный контролер найден
    if (i<volume)
    {
 
        //Ставим телевизор к нему на обслуживание
        if (((ptr->Data())->seconds)<=2100)
        {
            serving[i]=p;
        }
        else
        {
            brak++;
            delete serving[i];
        }
 
 
        //Разыгрываем время обслуживания
        to_served[i]=serv1+rand()%(serv2-serv1+1);
    }
    else                           //все контролеры заняты
    {
        //Создаем элемент списка для постановки телевизора в очередь
        ListNode<TV> *ptr=new ListNode<TV>(p,NULL);
        //Если очередь пуста, делаем его головой списка
        if (q_length==0) queue=ptr;
        //иначе ставим в конец очереди (хвост списка)
        else ListAdd<TV>(queue,ptr);
        q_length++;                   //инкремент длины очереди
    }
    }
    //Поиск свободного контролера
    
    return;
}
и проблемы не будет
проблемы не стало , но появилась другая... на проверку заявки почему то не попадают..сейчас буду смотреть что не так...
в этом месте кода я подаю заяви на проверку к контролеру, и хотел сделать проверку: если заявка стояла в очереди больше 35 минут (2100 секунд) то ей в обслуживании отказуют. сейчас программа запустилась , но количество успешно обработаных заявок = 0. Брак тоже =0
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.12.2012, 13:53 #11
galaxyblazer, простое задание. Три очереди, положить туда заявки и время. Когда кто-то достает, то проверяет время и затем обрабатывает(если подходит). Затем положить во-вторую очередь и т.д.
0
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
02.12.2012, 13:56  [ТС] #12
Цитата Сообщение от go Посмотреть сообщение
galaxyblazer, простое задание. Три очереди, положить туда заявки и время. Когда кто-то достает, то проверяет время и затем обрабатывает(если подходит). Затем положить во-вторую очередь и т.д.
так не пойдет! очередь должна быть одна! такое условие задания, это же модель СМО которую мне задали с определенными параметрами и условиями. У меня одна очередь, 3 очереди мне сделать нельзя!
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.12.2012, 14:10 #13
galaxyblazer, тогда четко сформулируйте задание. Что значит три пункта контроля.
0
galaxyblazer
0 / 0 / 0
Регистрация: 18.03.2012
Сообщений: 251
02.12.2012, 14:23  [ТС] #14
Цитата Сообщение от go Посмотреть сообщение
galaxyblazer, тогда четко сформулируйте задание. Что значит три пункта контроля.
3 пункта контроля это три обработчика. Система состоит из очереди в которой заявки ожидают обработки на одном из контроллеров (т.е. какой контроллер будет свободен на том и будет обрабативаться заявка ) , после обработки заявка покидает систему. Заявки поступают в систему через каждых 42-55 секунд. Контроллеры обрабатывают заявку 2+-3 минуты! Заявка которая стоит в очереди больше 35 минут , не обрабатывается . У меня здесь проблема именно с тем что-бы не обрабатывать заявки которые стояли в очереди больше 35 минут. Т.е. у меня было два варианта: первый - каждый раз пробегать по очереди и считать сколько времени каждая заявка стоит в очереди, или же использовать второй вариант: перед поступлением заявки к контроллеру, проверять сколько времени заявка была в очереди, если больше 35 минут то кидать ее сразу на выход и инкрементировать счетчик заявок которым отказали в обслуживании.
Я выбрал второй вариант, так как по идее он проще, и на роботу моей модели не повлияет, так как количество мест в очереди не ограничено!
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.12.2012, 14:27 #15
Цитата Сообщение от galaxyblazer Посмотреть сообщение
Я выбрал второй вариант, так как по идее он проще, и на роботу моей модели не повлияет, так как количество мест в очереди не ограничено!
Да. Второй лучше. И еще вопрос: Вы синхранизируете обращение к очереди?
0
02.12.2012, 14:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2012, 14:27
Привет! Вот еще темы с ответами:

Программа компилируется в Borland 6.0 но не компилируется в Visual Studio 2008 - C++
Ета програма компилируетса в борланде 6.0 но не компилируетса в Visualstudio 2008 и в борланде 10-м почему? #include&lt;iostream&gt; ...

Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает - C++
почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает. Имею в ввиду что сделал прогу которая меняет...

Почему возможно задать массив с размером -1 (почему такое вообще компилируется)? - C++
Всем привет. Долгое время не писал на плюсах, решил пройтись по основам, вспомнить. По непонятным для меня причинам этот код...

Почему не работает программа - C++
задача взята из учебника Дейтел Х. Как програмировать на С++ рис 6.1 вроде все набрал правильно но выдает ошибки вот код: #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru