Форум программистов, компьютерный форум CyberForum.ru

Одновременная блокировка/разблокировка функционала программы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Обобщенная функция перевода строки в число http://www.cyberforum.ru/cpp-beginners/thread1242686.html
В книге "С++. Сборник рецептов" нашел обобщенную функцию преобразования строки в число: #include <iostream> #include <sstream> #include <conio.h> using namespace std; template<typename T> T strNum(const string& str) {
C++ Метод хорд - проверить корректность реализации кода Приветствую, форумчане. Хочу обратиться к вам за помощью, вот еле написала программу для метода хорд, методом шары если честно, так как сама не сильна в программировании и код был соединен из двух других, так как мне нужно не просто решение, но и подсчет числа итерации. Само собой тут что то не работает, но хоть компилируется, хотя дальше ввода данных дело не идет. Так вот, проверьте пожалуйста,... http://www.cyberforum.ru/cpp-beginners/thread1242642.html
C++ Проверить вычисления на переполнение и потерю точности
Надо написать функции арифметических действий с проверкой переполнения,потери и генерировать исключение если оно случается. Вообщем то как бы все просто, в функции сделать операцию в более широком типе и проверить с помощью констант INT_MAX, получается что для целочисленных типов максимум ULLONG_MAX. Как проверить выше ULLONG_MAX и какой максимум для dobule - 1.79769e+308? Добавлено через 10...
C++ Можно ли создать объект экспортируемого из DLL класса без лишних манипуляций?
Привет! Есть DLL, экспортирую из неё класс, можно ли в коде, имея header (файл с описанием DLL-ки) этой DLL, создать экземпляр этого класса без вызова функций каких - то из DLL? Ведь обычно для таких целей в DLL делают глобальную функцию, с названием типа GetPointer, GetClass, GetApp, QueryInterface и т.д., которая возвращает указатель на созданный в DLL-ке экземпляр класса и потом уже в коде...
C++ Каким образом пройдёт передача параметров в функцию http://www.cyberforum.ru/cpp-beginners/thread1242622.html
Доброго времени! Переписываю код с Си. Есть такая вот ф-ия: cl_int clEnqueueCopyImage ( сonst size_t src_origin ) Как произойдёт передача src_origin? 1) src_origin полностью скопируется в стэк и займёт там 3*sizeof(size_t) байт 2) в стэк попадёт только адрес первого эл-та src_origin и займёт в памяти стэка sizeof(*void)
C++ Реализовать блок-схему алгоритма Требования: 1) дополнительные функции не вводить 2) действие_0 и действие_1 не должны дублироваться в коде 3) goto не использовать Не утверждаю, что есть решение. Спасибо, кто откликнется. подробнее

Показать сообщение отдельно
Andy Summers
0 / 0 / 0
Регистрация: 12.08.2014
Сообщений: 2
14.08.2014, 22:37     Одновременная блокировка/разблокировка функционала программы
Прошу прощения за столь изворотливый заголовок темы.
Опишу суть проблемы.
Разрабатываю программу для работы с электронными токенами.
В программе присутствуют два потока: один предназначен для выполнения основного функционала (интерпретация команд пользователя), другой - для отслеживания событий в слотах.

Функционал программы в отсутствие токена ограничен. Для контроля за функционалом я завёл переменную булева типа. К ней может обращаться как основной поток, так и дополнительный. Для контроля событий используется проприетарная функция из библиотеки поставщика. Как только произошло очередное событие, проприетарная функция возвращает некий результат (0, если функция завершила свою работу успешно). Если она завершилась успешно, то далее происходит изменение состояния переменной, ответственной за контроль над функционалом (было false, стало true и наоборот). Выглядит это примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
while (true)
{
    int res = 0;
 
    if (res = fPtr->WaitSlotEvent(&slotID))
    {
        get_error_info(res);
        break;
    }
 
    if (*(fParam.inserted))
    {
        *(fParam.inserted) = false;
        *(fParam.blocked) = true;
        printf("Token was removed. Protected mode on.");
    }
    else
    {
        *(fParam.inserted) = true;
        *(fParam.blocked) = false;
        printf("Token was inserted. Protected mode off.");
    }
}
Проблема в том, что программа иногда ведёт себя странным образом.

Когда я вставляю токен, появляется одно из сообщений выше. Ошибок замечено не было, функционал блокируется/разблокируется, как и ожидалось. Но иногда, когда я вынимаю токен, появляются сразу ДВА сообщения. Отсюда имеем, что при извлечённом токене функционал не заблокирован, и наоборот, что приводит к тому, что приложение сыпится. В связи с чем это происходит? Как с этим бороться? Почему одновременно происходит блокировка/разблокировка? Стоит отметить, что основной поток только читает эту переменную, нигде её не изменяя.

В случае, если я опубликовал свой вопрос не там, где нужно, прошу модераторов перенести тему. Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 08:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru