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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Xantrax
17 / 17 / 1
Регистрация: 28.11.2012
Сообщений: 328
#1

Выполнение действий с возможностью действия - C++

28.08.2013, 18:27. Просмотров 389. Ответов 3
Метки нет (Все метки)

Извиняюсь за теоретический вопрос, но все же попробую обратиться к вашим экстрасенсорным способностям.

Есть последовательность действий(функции выполняющие определенные действия) которую нужно выполнять, есть переменная-переключатель действий(int a), изменение которой должно приводить к переключению действий. Я с помощью таймера контролирую значение этой переменной(переключателья действия) и в зависимости от значения выполняю действие.
Выглядит это примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
int i = 0;
 
void TForm1::ButtonClick()
{
    if(i==0)
    {
        Timer1->Enable = true; // по нажатию кнопки включаю таймер
        i++;
    }
     else if(i!=0)
    {
         Timer1->Enable = false;//
         i = 0;
     }
}
 
 
void TForm::TimerStart()              //Работа таймера с установленным интервалом 
{
    switch(a)
    {
        case 0:
        {
            действие0();
            a = 2;
            break;
        }
        case 1:
        {
            действие1();
            a = 2;
            break;
        }
        case 2:
        {
            действие2();
        if(определенные обстоятельства)
        {
            a = 1;
            break;
        }
         a = 0;
         break;
       }
    }
}
Проблема в том, что тики таймера приходят во время когда, допустим, выполняется действие 2 и переменная все еще равна тому значению для выполнения второго действия, соответственно программа вновь начинает выполнять второе действие....
Как реализовать цикл с точным выполнением действий и возможностью выхода из этого цикла?
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2013, 18:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выполнение действий с возможностью действия (C++):

Выполнение действий с двоичными векторами - C++
Начало есть; нужно выполнить сложение векторов и сдвиг //Создайте класс bVect для выполнения действий с двоичными векторами. //Длина...

Выполнение действий через некоторое время - C++
хочу сделать так чтобы на экран выводились всякие символы через некторое время. ну например: сначала на экран выводится П черех несколько...

Выполнение действий через заданный промежуток времени - C++
Нужен самый простой пример програмки на си++ (работаю в вижуал студио), которая будет каждый равный промежуток времени выполнять какоето...

Одновременное выполнение действий без использования потоков/процессов - C++
Нужно ожидать ввода команды со стандартного потока и в то же время в начале каждого часа вызывать некую функцию ( func назовем). ...

Чтение двумерного массива и выполнение над ним действий - C++
Здравствуйте форумчане, вот столкнулся с проблемкой....есть текстовый документ в нем написан двумерный массив(с чтением массива из файла...

Реализовать выполнение заданных действий над одномерным массивом. - C++
"Реализовать выполнение заданных действий над одномерным массивом. Число элементов массива задаётся пользователем. Элементы могут...

3
ValeryS
Модератор
6673 / 5082 / 474
Регистрация: 14.02.2011
Сообщений: 17,047
28.08.2013, 18:41 #2
можно поставить флаг занятости
например так
C++
1
2
3
4
5
6
7
8
9
10
11
case 0:
 {
   if(flag==0)
    {  
     flag=1;
     действие0();
      a = 2;
      flag=0;
      }
      break;
    }
можно воспользоваться семафорами, мютексами
0
Xantrax
17 / 17 / 1
Регистрация: 28.11.2012
Сообщений: 328
28.08.2013, 19:26  [ТС] #3
можно поставить флаг занятости
C++
1
2
3
4
5
6
7
8
9
10
11
case 0:
 {
   if(flag==0)
    {  
     flag=1;
     действие0();
      a = 2;
      flag=0;
      }
      break;
    }
Не понял идею...
воспользоваться семафорами
У меня один процесс и поток...
0
ValeryS
Модератор
6673 / 5082 / 474
Регистрация: 14.02.2011
Сообщений: 17,047
28.08.2013, 19:37 #4
смотри
при первом заходе flag равен 0
значит заходим в тело условия
задаем flag =1
выполняем действие0();
в это время таймер опять срабатывает но флаг равен 1
значит условие не срабатывает и выходим из обработчика
действие0(); закончилось
и flag опять обнулился
при следуешем срабатывании таймера можем опять производить действия
можно вообще весь свич обернуть этим условием
разумеется flag не может быть локальной переменной, иначе каждый раз при заходе в функцию будет создаватся заново
или глобальная или статическая или член класса
0
28.08.2013, 19:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 19:37
Привет! Вот еще темы с ответами:

Выполнение действий над элементами двумерных массивов целых чисел - C++
Написать программу, выполняющую действия над элементами двумерных массивов целых чисел. Действия оформить как отдельные функции. Все...

Выполнение действия в командной строке - C++
Есть кусок кода, на него жалуется компилятор, что вроде в нём что-то не так. Подскажите, пожалуйста, что тут не по феншую. void...

Бесконечное выполнение одного и того же действия - C++
Аля Ваас! :-) А теперь к делу, есть код: #include <iostream> #include "Windows.h" using namespace std;

Приостановить выполнение цикла до совершения какого-то действия - C++
Я пишу дурака. Нужно, чтобы действия походить, отбиться, подкинуть и т.д. происходили до того момента, пока кол-во карт в отбое не будет...


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

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

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