Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Прерывание выполнения функции

21K
20 августа 2008 года
TITAMIN
58 / / 24.07.2008
Последовательно просматриваю Jpg файлы в каталоге, выводя на канву (серийную съемку просматриваю), есть проблема, пока не дойду до конечного файла - программа не реагирует на действия пользователя(типа висит).
Как можно организовать прекращение выполнения действия?Или не прекращение, а чтоб окно реагировало на запросы.
Код:
WIN32_FIND_DATA FindFileData;

 

  HANDLE hFind;

  AnsiString SubDirList [300];
int i_count=0;








 hFind = FindFirstFile("D:\\1\\SERIAL_JPG\\*.jpg", &FindFileData);


  SubDirList[0] = FindFileData.cFileName;





   

  AnsiString s = "D:\\1\\SERIAL_JPG\\" ;
  AnsiString p = FindFileData.cFileName;
  s = s + p;

 Graphics::TBitmap * Bitmap = new Graphics::TBitmap;
TJPEGImage * examp = new TJPEGImage;
examp->LoadFromFile(s);
Canvas->StretchDraw(Rect (5, 155, 200,300), examp);
delete examp;




do {
                                i_count++;
                                FindNextFile (hFind, &FindFileData);
                                SubDirList[i_count] = FindFileData.cFileName;
                             Memo1 -> Lines -> Add (SubDirList[i_count]);
 p = 0;                              

 s = 0;
 

 p = FindFileData.cFileName;
 s = "D:\\1\\SERIAL_JPG\\" ;
  s = s + p;

TJPEGImage * examp = new TJPEGImage;

examp->LoadFromFile(s);
Canvas->StretchDraw(Rect (5, 155, 200, 300), examp);
delete examp;

  } while (SubDirList[i_count] != SubDirList[i_count-1]);
3.7K
20 августа 2008 года
0nni
326 / / 24.06.2008
Правильно и не будет
попробуй в цикле после StreachDraw поставить
 
Код:
Application->ProcessMessages();

Вообще ставь ее во всех длинных циклах...
21K
20 августа 2008 года
TITAMIN
58 / / 24.07.2008
Пасиба большое 0nni.
288
20 августа 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: 0nni
Правильно и не будет
попробуй в цикле после StreachDraw поставить
 
Код:
Application->ProcessMessages();

Вообще ставь ее во всех длинных циклах...



Вот насчет всех длинных циклов - не уверен. Можно такого намутить. Это ладно, когда в очереди сообщения типа WM_SIZE, WM_PAINT, ну или WM_CLOSE. Все отработает нормально. А если сообщения о нажатии какой-нибудь кнопки, обработчик которой по идее не должен выполняться пока приложение занято циклом.
ProcessMessages надо использовать с острожностью, предварительно обезопасив себя от выполнения кода, который выполниться не должен.

3.7K
20 августа 2008 года
0nni
326 / / 24.06.2008
Цитата: nikitozz
Вот насчет всех длинных циклов - не уверен. Можно такого намутить. Это ладно, когда в очереди сообщения типа WM_SIZE, WM_PAINT, ну или WM_CLOSE. Все отработает нормально. А если сообщения о нажатии какой-нибудь кнопки, обработчик которой по идее не должен выполняться пока приложение занято циклом.
ProcessMessages надо использовать с острожностью, предварительно обезопасив себя от выполнения кода, который выполниться не должен.


ну да, переборщил... но ведь можно перед этим очистить все сообщения от мыши и клавиатуры (названия функций не помню)... а еще в таких случаях ставят Etable на False для всех кнопок которые нельзя нажимать. Еще можно ставить флаги...
Короче в данном конкретном случае использовать ProcessMessages боее чем приемлемо!:cool:

21K
20 августа 2008 года
TITAMIN
58 / / 24.07.2008
Ну тогда еще один вопросик.:)
Как сделать паузу при просмотре, далее при продолжении процесса просмотра начать не сначала, а со следующеко файла. во как :rolleyes:
3.7K
20 августа 2008 года
0nni
326 / / 24.06.2008
ага, тогда читай про списки - тебе сначала прийдется составить список изображений лучше конечно имен файлов), и затем показывать уже по номеру в списке, но только не в цикле (куда ты его вообще вставил?), а по событиям например от нажатия на кнопку "далее".
зы. Такое ощущение что только что перешел на объектно-событейную модель, а до этого программировал под дос. Поищи литературы - тут совсем другой подход.
21K
21 августа 2008 года
TITAMIN
58 / / 24.07.2008
Да тут дело не втом. Я понимаю что по нажатию клавиши лучше, но мне принципиальна скорость, не уменьшится?
11
21 августа 2008 года
oxotnik333
2.9K / / 03.08.2007
уменьшится.
засунь в отдельный поток, ему можно приоритет побольше сделать
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог