Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
marsis
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 16
#1

Не получается открыть семафор. GetLastError 5 - C++

25.04.2016, 18:18. Просмотров 419. Ответов 4
Метки c++ (Все метки)

Пишу программу Парикмахерская. Она подразумевает использование семафоров. Первые 4 семафора создаются в первой программе, и открываются во второй. С остальными семафорами ситуация обратная.
Часть первой программы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HANDLE barber,cashier;//costumer[49];
    int n;
    textcolor(WHITE); //цвет текста - белый
 
    max_capacity = CreateSemaphore(NULL, 20, 20, "max_capacity1");
    sofa = CreateSemaphore(NULL, 4, 4, "sofa");
    barber_chair = CreateSemaphore(NULL, 1, 1, "barber_chair");
    coord = CreateSemaphore(NULL, 1, 1, "coord");
while (cust_ready==NULL)
    {
     cust_ready = OpenSemaphore(NULL, false, "cust_ready");
    leave_b_chair = OpenSemaphore(NULL, false, "leave_b_chair");
    payment = OpenSemaphore(NULL, false, "payment");
    receipt = OpenSemaphore(NULL, false, "receipt");
 
    finished = OpenSemaphore(NULL, false, "finished");
    }
часть второй программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  HANDLE barber,cashier,costumer[49];
    int n;
    textcolor(WHITE); //цвет текста - белый
    while (max_capacity==NULL)
    {
    max_capacity = OpenSemaphore(NULL,false, "max_capacity1");
    sofa = OpenSemaphore(NULL, false, "sofa");
    barber_chair = OpenSemaphore(NULL, false, "barber_chair");
    coord = OpenSemaphore(NULL, false, "coord");
    int error=GetLastError();
    cout<<"error code:"<<error<<'\n';
    }
    cust_ready = CreateSemaphore(NULL, 0, 1, "cust_ready");
    leave_b_chair = CreateSemaphore(NULL, 0, 1, "leave_b_chair");
    payment = CreateSemaphore(NULL, 0, 1, "payment");
    receipt = CreateSemaphore(NULL, 0, 1, "receipt");
 
    finished = CreateSemaphore(NULL, 0, 1, "finished");
    if (max_capacity!=FALSE)
При запуске обоих программ на вывод идет "error 5", что означает отказ в доступе. Обе программы запускал от имени администратора. С чем это может быть связано и как решить эту проблему?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2016, 18:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Не получается открыть семафор. GetLastError 5 (C++):

не получается открыть файл
всем привет. у меня такая проблема, когда я пишу в программе путь к файлу:...

Вопрос по GetLastError
Кто поможет советом? Создаю обычную консольку, в ней пытаюсь функцией...

Не получается открыть бинарный файл
Всем привет! Есть класс Garage! у него приватное поле string name и поле...

RegOpenKeyEx(). Не получается открыть реестр
HKEY hKey; RegOpenKeyEx(HKEY_LOCAL_MACHINE, LPCWSTR(&quot;SOFTWARE&quot;), 0, KEY_READ,...

New MyClass & GetLastError
подскажите, допустим, закончилась память и при выделении для объекта myclass =...

Не получается открыть файл с именем, которое задается пользователем в консоли
Хочу написать процедуру для работы с файлами. В нее нужно передавать имя файла,...

4
Убежденный
Ушел с форума
Эксперт С++
15941 / 7252 / 1176
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
25.04.2016, 18:21 #2
GetLastError следует звать только в том случае, если функция вернула ошибку.
В остальных случаях значение last error не определено.
1
marsis
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 16
25.04.2016, 18:43  [ТС] #3
Сделал возврат ошибки по условию. Ситуация не изменилась вообще никак. Но это я так понимаю была информация "к сведению".
0
Убежденный
Ушел с форума
Эксперт С++
15941 / 7252 / 1176
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
25.04.2016, 19:26 #4
Лучший ответ Сообщение было отмечено marsis как решение

Решение

Информация к сведению - II.
Первый аргумент OpenSemaphore задает желаемые права доступа,
например, SEMAPHORE_ALL_ACCESS или SEMAPHORE_MODIFY_STATE.
NULL туда передавать не надо.
0
marsis
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 16
25.04.2016, 19:43  [ТС] #5
Разобрался. Дело оказалось в атрибутах доступа.
В строках наподобие

C++
1
cust_ready = CreateSemaphore(NULL, 0, 1, "cust_ready");
Нужно вместо NULL указывать SEMAPHORE_ALL_ACCESS. Тогда такой ошибки не будет.
0
25.04.2016, 19:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2016, 19:43
Привет! Вот еще темы с решениями:

потоки, мьютекс и семафор
Вот задание: Выполнить индивидуальное задание параллельным алгоритмом...

GetLastError
А как иожно сделать так, чтобы при вызове этой функции возвращалась...

Не получается открыть файл
Добрый день, необходимо реализовать обработку данных из файла, я написал...

Не получается открыть папку
Доброе время суток! У меня возникла проблема, после чего пришлось...


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

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

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