1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Здраствуйте! У меня вот такая тема для разработки - "Регулирование движения поездов на станции (Система массового обслуживания, потоки)"... Т.е. можно сказать, что процессорное время (ресурс) - наша станция, тогда потоки - поезда.. и нужно распланировать использование этого ресурса...Но это всё общие фразы.. Объясните пожалуйста, как это должно выглядеть более конкретно..я пока не очень понимаю..
Не то ты делаешь Тебе не надо ждать 10 секунд... Понимаешь, там, откуда ты взяла эту реализацию, задача другая стояла: там было "нет места - проезжай", у тебя "нет места - жди", поэтому ты должна после неудачной попытки не завершать поток, а повторить попытку проверки семафора:
int finished = 0; do { // Проверяем состояние семафора DWORD dwResult = WaitForSingleObject(hSemaphore, 1000); // !!! ждем 1 секунду DWORD time_stopping; switch(dwResult) { case WAIT_OBJECT_0: // Место есть, остановка wsprintf(buf,L"Train #%d is stoping...",*p); SendMessage(hListBox,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)buf); time_stopping = (rand() % 3000) + 1000; // Время стоянки Sleep(time_stopping); ReleaseSemaphore(hSemaphore, 1, NULL); // Освободим семафор finished = 1; break;
case WAIT_TIMEOUT: // Семафор занят, сообщаем об этом, и повторяем попытку ... wsprintf(buf, L"Train #%d: no empty places...waiting",*p); SendMessage(hListBox,LB_ADDSTRING, 0, (LPARAM)(LPCSTR)buf); break; } } while(!finished); return 0; }
, а там, где ты запускаешь потоки - дождись их завершения, иначе ты уничтожаешь семафор сразу после их инициализации, ничего не успеет произойти:
WaitForMultipleObjects(maxTrains, trainHandles, TRUE, INFINITE); // дождаться всех CloseHandle(hSemaphore); // и только теперь удалить семафор
Вот что выдало мне:
Цитата
Train #3... Train #5... Train #7... Train #4... Train #2... Train #1... Train #6... Train #3 is stoping... Train #8... Train #9... Train #5 is stoping... Train #10... Train #7 is stoping... Train #4: no empty places...waiting Train #2: no empty places...waiting Train #1: no empty places...waiting Train #6: no empty places...waiting Train #8: no empty places...waiting Train #10: no empty places...waiting Train #9: no empty places...waiting Train #4 is stoping... Train #2 is stoping... Train #1 is stoping... Train #8: no empty places...waiting Train #6: no empty places...waiting Train #10: no empty places...waiting Train #9: no empty places...waiting Train #8 is stoping... Train #6 is stoping... Train #10 is stoping... Train #9: no empty places...waiting Train #9 is stoping...