Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2016, 20:49   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию Поразмыслим о задачке

Я в програмке жду окончания анимации ( с окна другой программы) путем сравнения 3х кадров ( небольших участков скриншота где анимация явно выражена) между собой.
Если все 3 равны то считаю анимацию законченной и передаю последний скриншот на сервер.

Подводный камень этого процесса: если подвисает эта другая програмка с которой я ожидаю конца анимации, то по алгоритму программа считает что анимация закончена и передает на сервер размазанный рисунок, который получился.


Пока что немного уменьшил вероятность отправки замазанной картинки при подвисании явно задав минимальное количество кадров(скриншотов) после которого уже сравнивать 3 кадра т.е. как бы задержку по времени.

Что можно предложить чтобы определить что эта другая программа подвисла и ждать пока отвиснет?
Illusiony вне форума Ответить с цитированием
Старый 23.05.2016, 21:35   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Можно попробовать SendMessageTimeout
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
https://rsdn.ru/article/qna/baseserv/hungapp.xml
Правда, сильно зависит от программы с анимацией. Зависнуть может только анимация, а не вся программа. В этом случае не особо поможет. Хотя такое, вероятно, не должно случаться часто
eoln вне форума Ответить с цитированием
Старый 23.05.2016, 21:51   #3
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от eoln Посмотреть сообщение
Можно попробовать SendMessageTimeout
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
https://rsdn.ru/article/qna/baseserv/hungapp.xml
Правда, сильно зависит от программы с анимацией. Зависнуть может только анимация, а не вся программа. В этом случае не особо поможет. Хотя такое, вероятно, не должно случаться часто
Да полагаю зависание анимации и самой программы это одно и тоже
Illusiony вне форума Ответить с цитированием
Старый 24.05.2016, 18:02   #4
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

eoln, сейчас задам вопросик , обычно который используют наоборот

Можно ли както заставить нужное приложение по команде "подвиснуть" на нужное время порядка 2-5 секунд? для тестирования такой ситуации в работе своей программы?

Кстати вроде эта функция возвращает ответ что программа зависла через 5 секунд( это много, хотя можно поизвращаться.

Последний раз редактировалось Illusiony; 24.05.2016 в 18:41.
Illusiony вне форума Ответить с цитированием
Старый 24.05.2016, 18:25   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
сейчас задам вопросик
, который надо задать для пресечения, как говорят у нас в посёлке, "the invention of the bicycle with triangular wheels": чо за монстра рожаешь, франкенштейн?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 24.05.2016, 19:26   #6
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Сделал такое:
1) програмку на delphi в которой sleep(10000) для имитации зависания
2) вторую програмку которая отслеживает зависание первой:
Код:
function AppIsResponding(): Boolean;
 const
   { Specifies the duration, in milliseconds, of the time-out period }
   TIMEOUT = 50;
 var
   Res: DWORD;
   h: HWND;
 begin
    h := findwindow(nil, 'test_zavisaniy');
  // h := FindWindow(PChar(ClassName), nil);
   if h <> 0 then
     Result := SendMessageTimeOut(H,
       WM_NULL,
       0,
       0,
       SMTO_NORMAL or SMTO_ABORTIFHUNG,
       TIMEOUT,
       Res) <> 0
   else
     ShowMessage(Format('%s not found!', ['test_zavisaniy']));
 end;

{ procedure TForm1.Button1Click(Sender: TObject);
 begin
   if AppIsResponding('OpusApp') then
     { OpusApp is the Class Name of WINWORD }
 //    ShowMessage('App. responding');
 //end;  }
procedure TForm1.btn1Click(Sender: TObject);
begin
 if AppIsResponding()=True then begin
   ShowMessage('True');
 end
 else begin
   ShowMessage('False');
 end;
end;
Так работает, понимает когда находитяс в слипе , а когда нет.
Но мне нужно проверить на реально смоделированном условии чтобы вместо програмки 1 было нужная мне программа и эту нужную программу нужно "подвесить" в по команде на определенное время.
Ну и вообще равнозначный ли процесс зависания по слипу или это неправильное суждение.

Нашел такое:http://superuser.com/questions/62072...a-command-line

Там команды в винде, пробую сделать :
Код:
 wmic process where name="Hearthstone.exe" CALL setpriority "idle"
никакой разницы не замечаю

Приоритет меняется, попробовал явно указать :
Код:
 wmic process where name="Hearthstone.exe" CALL setpriority 5
Но ПРограмма все равно работает нормально.
Наверное приоритетами такое сделать нельзя(

Последний раз редактировалось Illusiony; 24.05.2016 в 19:44.
Illusiony вне форума Ответить с цитированием
Старый 24.05.2016, 20:10   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну тормозните всего его потоки.
но это маразм, вообще не понимаю нафиг
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.05.2016, 20:13   #8
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ну тормозните всего его потоки.
но это маразм, вообще не понимаю нафиг
Мне нужно затормазить , и потом чтобы она отвисла и дальше начала работать.
Ну как нафиг? мне нужно эмитировать такую ситуацию.
Illusiony вне форума Ответить с цитированием
Старый 24.05.2016, 20:22   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
Мне нужно затормазить , и потом чтобы она отвисла и дальше начала работать.
Ну как нафиг? мне нужно эмитировать такую ситуацию.
Эмитировать! Ой, я - нимагу!
Изображения
Тип файла: jpg hotdem_ru_695296651776037473425.jpg (51.9 Кб, 81 просмотров)
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.05.2016, 20:45   #10
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию

Ну имитировать
Illusiony вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исправить ошибку в задачке на языке Си Artur2048 Помощь студентам 1 02.12.2013 05:57
Массивы,паскаль. Ошибка в задачке Jafrey Помощь студентам 7 13.05.2011 22:19
Нужна помощь в интересной задачке.. swink Паскаль, Turbo Pascal, PascalABC.NET 15 11.05.2009 15:10
Помощь в Задачке для начинающих С++ Woha Общие вопросы C/C++ 7 24.10.2008 20:11