1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Здраствуйте! У меня вот такая тема для разработки - "Регулирование движения поездов на станции (Система массового обслуживания, потоки)"... Т.е. можно сказать, что процессорное время (ресурс) - наша станция, тогда потоки - поезда.. и нужно распланировать использование этого ресурса...Но это всё общие фразы.. Объясните пожалуйста, как это должно выглядеть более конкретно..я пока не очень понимаю..
Угу... Во-первых, зачем тебе понадобилось инициализировать ГСЧ внутри Puass? После этого даже если саму функцию Puass написать правильно - будут глюки, ГСЧ не должен инициализироваться в одном потоке больше одного раза.
Кроме всего прочего, функция Puass переведена неправильно, ты забыла, что в Repeat/Until условие - обратное, не такое, как в While. Цикл Repeat/Until выполняется, пока условие ложно. Как только оно станет истинным - цикл немедленно завершается. А ты заменила паскалевский Repeat/Intil Сишным while-ом с тем же условием, вот тебе и результат: после первой же итерации цикл завершается, при этом K = 1, что ты и наблюдала
Таймер тебе вообще не нужен. Все проще:
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);