Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Зависание функции из модуля.   Найти похожие ветки 

 
Profi ©   (2005-10-24 19:46) [0]

Есть модуль, есть программа, в которую мы его подключаем. В модуле есть функция с циклом. При обработке большого количества данных программа, ясное дело зависает. Если бы цикл был в модуле формы, то не проблема, вставил Application.ProgressMessage в цикл и все. А как тут быть? Знаю, что можно сделать как-то, но не нашел как. Заранее спасибо.


 
Sergey Masloff   (2005-10-24 20:33) [1]

Модуль это UNIT? Тогда Application.ProcessMessages можно использовать спокойно.

Если модуль это внешний бинарник - например DLL то нужно по другому.


 
Profi ©   (2005-10-24 22:47) [2]

Sergey Masloff   (24.10.05 20:33) [1]
Модуль это UNIT? Тогда Application.ProcessMessages можно использовать спокойно

Да, но это значит, что надо в функцию передовать TApplication, а не хотелось бы!


 
Игорь Шевченко ©   (2005-10-24 22:52) [3]

Profi ©   (24.10.05 22:47) [2]

Application вообще-то глобальная переменная, зачем ее куда-то передавать ?


 
SamProf ©   (2005-10-24 23:13) [4]

подключи в том модуле модуль forms и пиши там application.progressmesages;
Вот!


 
Kolan ©   (2005-10-25 00:17) [5]

Ну и второй способ - цикл сагнать в поток...


 
Германн ©   (2005-10-25 02:16) [6]

Не люблю потоки. Имхо, не видел до сих пор реальной необходимости их пользовать!


 
Джо ©   (2005-10-25 02:29) [7]


>  [6] Германн ©   (25.10.05 02:16)
> Не люблю потоки. Имхо, не видел до сих пор реальной необходимости
> их пользовать!

Например, одновременная обработка любых входящих запросов. Или "прослушивание" портов. Много применений, много.


 
Германн ©   (2005-10-25 03:03) [8]

2 Джо ©   (25.10.05 02:29) [7]

>  Много применений, много.
Не имею возражений в целом.
Но "одновременная обработка любых входящих запросов", имхо - невозможна. Всёравно придется их обработать последовательно, один за другим.
"Или прослушивание портов" - не вдаваясь в тонкости, что это за порты, но, имхо, любые порты предполагают возможность асинхронной работы с ними. Так зачем же нужны потоки?


 
Джо ©   (2005-10-25 03:22) [9]


> [8] Германн ©   (25.10.05 03:03)
> Но "одновременная обработка любых входящих запросов", имхо
> - невозможна. Всёравно придется их обработать последовательно,
> один за другим.

Имеем ситуацию.
В главном потоке имеется менеджер потоков, ожидающий, пока вызовут некий его метод, принимающий исходные данные для расчетов. Получив входные данные, менеджер запускает отдельный поток, выполняющий некую работу над этими данными. И так поступает с каждой новой приходящей порцией данных. Если не использовать потоки, вариантов 3:
1. Не получаем следующую порцию данных, не обработав предыдущий запрос. Недостатки - висим :(
2. Запускать для каждого задания отдельный процесс. Недостатки: Лишние накладные расходы, сложность синхронизации.
3. Делать свой механизм замораживания, переключение и возобновления работы между заданиями для создания иллюзии одновременной работы. Недостаток: велосипед.

Понятно, что слова "одновременная работа" в отношении потоков это абстракция. Но, абстракция полезная.


 
Германн ©   (2005-10-25 03:44) [10]

2 Джо ©   (25.10.05 03:22) [9]
Пока что все равно не согласен. Имхо.
Детально завтра, если понадобится. Сейчас иду спать, извини.


 
TUser ©   (2005-10-25 07:07) [11]

> Имхо, не видел до сих пор реальной необходимости их пользовать!

Вот тут у тебя одна из таких ситуаций - выполнение некоторой работы без зависания интерфейса.


 
Юрий Зотов ©   (2005-10-25 07:18) [12]

> Германн ©   (25.10.05 02:16) [6]

Например, всегда, когда нужно чего-то дождаться (или что-то сделать) в фоновом режиме.

Например, надо дождаться завершения запущенной внешней программы. Простой вызов WaitForXXX приведет к зависанию интерфейса и ругани юзера, а тот же самый вызов из второго потока - не приведет.



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

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.054 c
8-1118270419
ДЫМ
2005-06-09 02:40
2005.11.13
Нужна быстрая графическая библиотека, чтобы рисовать примитивы


4-1126619198
Erik1
2005-09-13 17:46
2005.11.13
Как получить статус процесса?


2-1129571918
Pasha L
2005-10-17 21:58
2005.11.13
_filetime в searchrec


14-1129889736
dr Tr0jan
2005-10-21 14:15
2005.11.13
Побор телефона


14-1130088231
alexsis
2005-10-23 21:23
2005.11.13
Бесплатный посыл СМС-ок