Доброго времени суток! Мне нужно реализовать мьютекс, событие и семафор, по заданию. С мьютексом и событием я вроде бы разобрался и выполнил, а вот на семафоре застопорился, на то он и семафор..наверное)) Вообщем, помогите мне пожалуйста с его реализацией!... какой-нибудь рабочий примерчик тоже сойдёт)
Можешь еще посмотреть у Рихтера, он тоже показывал, как работать с семафорами...
А вот как это всё применить для решения конкретной задачи? Вот собственно сама задача : на бензозаправке было построено 4 заправочных места. Считая их одинаковыми, подсчитать, какое количество машин вынуждено было проехать мимо, так как все места были заняты. Новая машина подъезжает к заправке через 1-2 мин. Время заправки одной машины – 1-4 мин. Для контроля количества свободных мест на заправке использовать семафор. Как хотя бы передать основную идею семафора...
Да и что-то пример на MSDN оказался крайне непонятным для меня.
volvo
7.12.2008 14:20
Цитата
А вот как это всё применить для решения конкретной задачи?
Вот так, примерно:
#include <iostream> #include <windows.h>
using namespace std;
LONG maxPlaces = 4; const int maxCars = 50;
HANDLE hSemaphore; HANDLE carHandles[maxCars]; int carIDs[maxCars];
// Ждем завершения всех тредов ... WaitForMultipleObjects(maxCars, carHandles, TRUE, INFINITE); // ... и только потом удаляем семафор CloseHandle(hSemaphore); } // Создать семафор не удалось else cout << "Cannot create semaphore" << endl;
return 0; }
Ну, подсчет проехавших мимо машин добавишь сам, основная идея должна быть понятна...
Rocket
8.12.2008 2:29
Цитата(volvo @ 7.12.2008 10:20)
Вот так, примерно:
Подсчёт добавил - всё отменно работает, спасибо!
А вот с событием что-то не получается. Я запускаю два приложения: в одном вывожу сообщение, нажимаю на клавиатуру и после этих действий в другом должна быть выведена другая строка. Но последного не происходит... Вообще само задание формулировалось следующим образом: реализовать два процесса, один из которых дожидается нажатия клавиши (или кнопки на окне) и сообщает об этом другому процессу с помощью события. После того, как второй процесс дождется события, он должен вывести на экран сто разноцветных геометрических фигур...(привел с целью полного ознакомления с заданием ) Помогите довести до ума то, что я начал.
volvo
8.12.2008 3:29
Цитата
Я запускаю два приложения: в одном вывожу сообщение, нажимаю на клавиатуру и после этих действий в другом должна быть выведена другая строка. Но последного не происходит...
Хм... Нажмите для просмотра прикрепленного файла Что я делаю не так? Сначала запустил приложение, создающее Event, потом - приложение, открывающее Event. Все так, как ты и сказал: при нажатии кнопки во втором в окне первого добавляется еще одна строка... Проверяй после OpenEvent, что возвращает GetLastError, возможно, событие не открывается?
Rocket
8.12.2008 3:35
Цитата(volvo @ 7.12.2008 23:29)
Хм... Нажмите для просмотра прикрепленного файла Что я делаю не так? Сначала запустил приложение, создающее Event, потом - приложение, открывающее Event. Все так, как ты и сказал: при нажатии кнопки во втором в окне первого добавляется еще одна строка... Проверяй после OpenEvent, что возвращает GetLastError, возможно, событие не открывается?
Да, действительно всё работает...видимо я сначала запускал приложение, которое открывает Event, а не создаёт его...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.