IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> регулирование движения поездов на станции, VC++ 2008 EE
18192123
сообщение 12.11.2008 23:37
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Здраствуйте!
У меня вот такая тема для разработки -
"Регулирование движения поездов на станции (Система массового обслуживания, потоки)"...
Т.е. можно сказать, что процессорное время (ресурс) - наша станция, тогда потоки - поезда.. и нужно распланировать использование этого ресурса...Но это всё общие фразы..
Объясните пожалуйста, как это должно выглядеть более конкретно..я пока не очень понимаю..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 15.12.2008 18:49
Сообщение #2


Гость






Цитата
Что-то я явно не так делаю
Угу... Во-первых, зачем тебе понадобилось инициализировать ГСЧ внутри Puass? После этого даже если саму функцию Puass написать правильно - будут глюки, ГСЧ не должен инициализироваться в одном потоке больше одного раза.

Кроме всего прочего, функция Puass переведена неправильно, ты забыла, что в Repeat/Until условие - обратное, не такое, как в While. Цикл Repeat/Until выполняется, пока условие ложно. Как только оно станет истинным - цикл немедленно завершается. А ты заменила паскалевский Repeat/Intil Сишным while-ом с тем же условием, вот тебе и результат: после первой же итерации цикл завершается, при этом K = 1, что ты и наблюдала smile.gif

Таймер тебе вообще не нужен. Все проще:
int Puass(double Lamda)
{
int k = 0;
double p0 = exp(-Lamda);
double P = p0;

// Генерируем вещественное число в интервале 0 .. 1
double ver = (double)rand() / RAND_MAX;
do {
ver -= P;
if(ver >= 0) {
P = P*Lamda / (k+1);
k += 1;
}
} while(ver >= 0);
return k;
}

// А вот так будет выглядеть цикл генерации потоков:
// генератор случ. чисел, основной поток приложения
srand(time(NULL));
if(hSemaphore = CreateSemaphore(NULL, maxPlaces, maxPlaces, NULL)) {
for(int i = 0; i < maxTrains; i++) {
DWORD timeWait = Puass(9.5) * 10; // <--- Ну, коэффициенты сама подберешь

wsprintf(buf, "Ждем %ld ms перед генерацией следующего потока-поезда", timeWait);
SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)(LPCSTR)buf);

// Ожидание, но все запущенные ранее потоки уже работают,
// на них Sleep не распространяется
Sleep(timeWait);

trainID[i] = i+1;
trainHandles[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)TrainThread,
&trainID[i], 0, NULL);

}


Сообщение отредактировано: volvo - 15.12.2008 18:52
 К началу страницы 
+ Ответить 

Сообщений в этой теме
18192123   регулирование движения поездов на станции   12.11.2008 23:37
18192123   Может быть у кого-нибудь есть идеи, как это эту те...   15.11.2008 15:32
volvo   Смотри... Я когда-то делал на форуме эмуляцию рабо...   15.11.2008 16:07
18192123   Мне убедительно посоветовали выбрать несколько ино...   13.12.2008 2:56
volvo   Не то ты делаешь :) Тебе не надо ждать 10 секунд.....   13.12.2008 5:09
18192123   Эх...а у меня не работает..приложение зависает.. и...   13.12.2008 23:14
volvo   В том, что я проверяю в консольном приложении, там...   14.12.2008 0:57
18192123   ... case WAIT_TIMEOUT: // Здесь добавит...   14.12.2008 2:35
volvo   Тебе нужно заставить форму обработать полученные с...   14.12.2008 3:02
18192123   Спасибо большое!! Теперь насчёт генерации ...   14.12.2008 19:45
volvo   Скорее всего так оно и должно быть... Как моделиро...   14.12.2008 22:34
18192123   Скорее всего так оно и должно быть... Как моделир...   14.12.2008 23:55
volvo   Вот тут лежит ... Последовательные вызовы этой фун...   15.12.2008 0:20
18192123   Вот тут лежит ... Последовательные вызовы этой фу...   15.12.2008 2:01
volvo   Да, все правильно... Ф-ю Puass можно использовать ...   15.12.2008 3:05
volvo   Угу... Во-первых, зачем тебе понадобилось инициали...   15.12.2008 18:49
volvo   Внимательно читать, что написано в предыдущем пост...   3.01.2009 13:46
18192123   здравствуйте! скажите пожалуйста, а как сгенер...   2.01.2009 17:37
18192123   оу..прошу прощения..как-то упустила, что з-н Пуасс...   4.01.2009 20:39


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 0:57
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"