Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.10.11;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по механизму работы application.ProcessMessages   Найти похожие ветки 

 
leonidus   (2009-08-06 17:16) [0]

Есть поток из которого вызывается процедура основного потока (назовем ее Spelling). Процедура ресурсоемкая поэтому периодически в ней вызывается application.ProcessMessages.

Пример кода:

...
Spelling(word1, word2, result1, result2);
if result1="" then

так вот заметил странность. Если в Spelling закомментировать application.ProcessMessages то все нормально, однако если application.ProcessMessages раскомментировать, то не дожидаясь полного выполнение процедуры Spelling, программа сразу переходит на строчку проверки условия if result1="" then. Это так и должно быть или меня глючит?


 
Сергей М. ©   (2009-08-06 17:25) [1]


> так и должно быть


Могло быть еще хуже)

Обращения к VCL-объектам в доп.потоке недопустимы.


 
leonidus   (2009-08-06 19:06) [2]

Во-первых кто вам сказал что я обращаюсь к VCL, моя процедура занимается только расчетом, да и Synchronize в природе имеется.


 
Сергей М. ©   (2009-08-06 19:20) [3]


> кто вам сказал что я обращаюсь к VCL


Ты сам и сказал


> поток из которого вызывается ... application.ProcessMessages.


 
Сергей М. ©   (2009-08-06 19:23) [4]


> Synchronize в природе имеется.

И что ?
Мало ли что "в природе имеется"..
Ты же не природа, а хрен знает что нахреначивший в своем коде)


 
Сергей М. ©   (2009-08-06 19:36) [5]


> моя процедура занимается только расчетом


Вот и пусть им занимается.
И не лазит при этом в "чужие расчеты"


 
leonidus   (2009-08-06 20:14) [6]

Ты не внимательно читал, Spelling это процедура основного потока application, я что не могу к ней обратиться из другого потока? В принципе я уже пробовал ее перенести внутрь моего потока, таже самая ситуация. Как же с одной стороны не затормозить главный поток и в тоже время дождаться полного завершения Spelling ?


 
Игорь Шевченко ©   (2009-08-06 20:20) [7]


> Ты не внимательно читал


Война давно кончилась, хватит партизанить


> Есть поток из которого вызывается процедура основного потока
> (назовем ее Spelling)


Тема вызова не раскрыта, мало кода, а телепаты в отпуске - лето.


 
Сергей М. ©   (2009-08-06 20:22) [8]


> процедура основного потока application


Галиматьища несусветная.


 
Сергей М. ©   (2009-08-06 20:23) [9]

Дуй уже в "Начинающие" - там будет полегче.


 
Сергей М. ©   (2009-08-06 20:44) [10]


> Spelling это процедура основного потока application


Не надо гнать пургу.
Spelling - это просто процедура.


 
Сергей М. ©   (2009-08-06 21:26) [11]


> leonidus


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


 
Loginov Dmitry ©   (2009-08-06 22:17) [12]

> Есть поток из которого вызывается процедура основного потока
> (назовем ее Spelling). Процедура ресурсоемкая поэтому периодически
> в ней вызывается application.ProcessMessages.


Автор, определись, либо все делай в основном потоке, и
периодически вызывай application.ProcessMessages для избежания
зависаний интерфейса пользователя, либо вызывай процедуру из
дополнительного потока, но в ней - никаких
application.ProcessMessages


> Как же с одной стороны не затормозить главный поток и в
> тоже время дождаться полного завершения Spelling ?


Решение 1: бросить на форму таймер, и через каждую
секунду проверять, не завершился ли поток.

Решение 2:
в главном потоке
while <поток не завершился> do
begin
 Sleep(0); // Для избежания 100%-й загрузки процессора
 Application.ProcessMessages;
end;


 
Leonid Troyanovsky ©   (2009-08-06 23:09) [13]


> Loginov Dmitry ©   (06.08.09 22:17) [12]

>  Sleep(0); // Для избежания 100%-й загрузки процессора

Не избежит.
Бо, если не объявился более приоритетный поток, то
выполняющийся процессором поток будет и дальше выполняться.

А для избежания надо, к примеру, MsgWaitForMultipleObjects
где-то в районе Application.OnIdle, хотя, IMHO, лучше ожидать
в отдельной форме (окне).

--
Regards, LVT.


 
leonidus   (2009-08-07 09:09) [14]

Спасибо, вопрос решен.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.10.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.048 c
9-1182687870
ElectriC
2007-06-24 16:24
2009.10.11
Shadow Map


15-1249763402
Юрий
2009-08-09 00:30
2009.10.11
С днем рождения ! 9 августа 2009 воскресенье


2-1249849905
Rendal
2009-08-10 00:31
2009.10.11
Воспроизведение файла из файлового потока через MediaPlayer


11-1206025013
andreil
2008-03-20 17:56
2009.10.11
Stream2Stream на АСМе?


2-1248866160
belmol
2009-07-29 15:16
2009.10.11
фигурная форма.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский