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

Reset приложения или как снять все задачи внутри программы - C++

Восстановить пароль Регистрация
 
er_nesto
2 / 2 / 0
Регистрация: 08.04.2012
Сообщений: 17
22.08.2012, 15:11     Reset приложения или как снять все задачи внутри программы #1
всем привет.
столкнулся с проблемой: приложение после клика кнопки должно выдавать анимацию на Image по картинке, т.е. в цикле постоянно открывать новую картинку из папки... но тут такое дело, что надо сделать так, чтоб при повторном нажатии этой же кнопки (ну или другой), пошло "воспроизвидение" другой анимации с начала, а после завершения - не продолжалась старая, т.е. снимались все задачи приложения...
мне трудно объяснить, но попробую еще так:
есть десять картинок с анимации "А", и 10 с анимации "B".
1) клик по кнопке, которая включает "А"
2) когда выполняется "А", жмём кнопку вызова "В"
3) получается:
АААА(клик)ВВВВВВВВВВАААААА

код ф-ции рисования в придачу)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void Draw (AnsiString name, int num, bool sound)
{
 if (sound)
 {
   Form1->MediaPlayer1->FileName = name+".mp3";
   Form1->MediaPlayer1->Play();
 }
 for (int i = 1; i <= num; i++)
 {
   Form1->Image1->Picture->LoadFromFile(name+"_ ("+i+").jpg");
   Sleep(t);
   Application->ProcessMessages();
   Form1->Image1->Repaint();
 }
}
Добавлено через 3 часа 13 минут
что никто не знает как это сделать? просто ребята, очень срочно(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2012, 15:11     Reset приложения или как снять все задачи внутри программы
Посмотрите здесь:

C++ Можно ли посмотреть, что внутри программы ?
Как запустить mdb - файл (Access) из программы С++ или VC++ C++
Определить, лежит ли точка внутри или вне круга, ограниченного указанной окружностью, или на окружности C++
Определить лежит ли точка внутри или вне круга,ограниченного указанной окружностью, или на окружности C++
C++ как будет выглядеть блок-схема программы? (Свой вариант внутри)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.08.2012, 15:20     Reset приложения или как снять все задачи внутри программы #2
никто не знает архитектуры твоего приложения, потому и сказать нечего.
er_nesto
2 / 2 / 0
Регистрация: 08.04.2012
Сообщений: 17
22.08.2012, 16:34  [ТС]     Reset приложения или как снять все задачи внутри программы #3
Цитата Сообщение от novi4ok Посмотреть сообщение
никто не знает архитектуры твоего приложения, потому и сказать нечего.
единственное что мне нужно - ф-ция которая снимает все текущие действия программы, но не закрывает её

Добавлено через 12 минут
возможно так более ясно будет:

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
void Draw (AnsiString name, int num, bool sound)
{
 if (sound)
 {
   Form1->MediaPlayer1->FileName = name+".mp3";
   Form1->MediaPlayer1->Play();
 }
 for (int i = 1; i <= num; i++)
 {
   Form1->Image1->Picture->LoadFromFile(name+"_ ("+i+").jpg");
   Sleep(t);
   Application->ProcessMessages();
   Form1->Image1->Repaint();
 }
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
 Draw("animation_A\\pict_num", 33, true);
}
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 
 Draw("animation_B\\pict_num", 33, true);
}
функция Draw: AnsiString name - место файла для чтения, int num - количество картинок для чтения по-очереди, bool sound - решает, будет ли играть заданая музыка вместе с анимацией.

ситуация: нажата кнопка Button1, идет обработка, играет анимация. не дождавшись выполнения всего цикла в Draw, я нажимаю Button2. сразу идет обработка второй анимации, после завершения чего - продолжается первая анимация с того места, где прервалась.

Вопрос: как отменить обработку 1й анимации при вызове 2й? какую ф-цию юзать перед Draw?
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.08.2012, 17:40     Reset приложения или как снять все задачи внутри программы #4
я никогда ничего нового не делал на с++ в дотнет (и тебе не советую, это - инвалид по рождению. но раз уж начал - нужно разобраться), посуму вопросов у меня много.
как между собой связаны эти две формы (я вижу две по крайней мере)?
если исходить из предположения, что ф-я Draw и обработка кнопок выполняются в разных трэдах, то напрашивается возможное решение - Sleep(); заменить на WaitForMultipleObjects(), с таким же временем ожидания, как и у Sleep, и ждать или истечения по таймеру, или сигнала события (создать). если событие просигналило - сбросить и выходить из цикла. по нажатию кнопки сигналить событие, затем запускать анимацию. примерно так.
er_nesto
2 / 2 / 0
Регистрация: 08.04.2012
Сообщений: 17
22.08.2012, 17:58  [ТС]     Reset приложения или как снять все задачи внутри программы #5
Цитата Сообщение от novi4ok Посмотреть сообщение
как между собой связаны эти две формы
да не, у меня одна форма))

дальше я почти ничего не понял.
Цитата Сообщение от novi4ok Посмотреть сообщение
если событие просигналило - сбросить и выходить из цикла. по нажатию кнопки сигналить событие, затем запускать анимацию
если так делать - нагрузка на проц будет куда больше. просто мне кажется что есть какаята ф-ция из стандартных библиотек, которая тупо останавливает всё что делала программа, просто не знаю как гуглу это объяснить. а с описаными Вами методами я не знаком, ничего не пойму(
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.08.2012, 18:05     Reset приложения или как снять все задачи внутри программы #6
а что такое тогда Form1, и что такое - ТForm1?
кому принадлежит Draw()?
er_nesto
2 / 2 / 0
Регистрация: 08.04.2012
Сообщений: 17
22.08.2012, 18:18  [ТС]     Reset приложения или как снять все задачи внутри программы #7
Form1 - название формы, так я обращаюсь к экземпляру класа TForm. TForm - класс форм в Builder-е
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.08.2012, 18:41     Reset приложения или как снять все задачи внутри программы #8
Цитата Сообщение от er_nesto Посмотреть сообщение
Form1 - название формы, так я обращаюсь к экземпляру класа TForm. TForm - класс форм в Builder-е
т.е. ты давишь на кнопку, и у тебя в обработчике этого события начинает крутиться цикл этой анимации? я так понимаю, что пока она не закончится, никаких кнопок ты больше нажать не можешь, как получается АААББББББББААА?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2012, 18:55     Reset приложения или как снять все задачи внутри программы
Еще ссылки по теме:

Запуск программы или файла с консольного приложения C++
C++ Определить, находится ли координата на "ободе", или за пределами, или внутри круга (найти ошибку)
Что оптимальнее: передавать матрицу как аргумент, или же формировать её внутри функции? C++

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

Или воспользуйтесь поиском по форуму:
er_nesto
2 / 2 / 0
Регистрация: 08.04.2012
Сообщений: 17
22.08.2012, 18:55  [ТС]     Reset приложения или как снять все задачи внутри программы #9
Цитата Сообщение от novi4ok Посмотреть сообщение
никаких кнопок ты больше нажать не можешь, как получается АААББББББББААА?
могу, для этого после каждого Sleep выполняется Application->ProcessMessages();
+ это устраняет блики Image при смене картинки
Yandex
Объявления
22.08.2012, 18:55     Reset приложения или как снять все задачи внутри программы
Ответ Создать тему
Опции темы

Текущее время: 20:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru