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

Вниз

Потоки и формы   Найти похожие ветки 

 
P_Aleks ©   (2004-04-27 16:16) [0]

Здравствуйте!
Перейду сразу к вопросу:
Народ, Никто не пытался приделать к форме свой thread? Т.е
Tread должен обрабатывать все оконные сообщения формы. Это может быть очень полезно ,например, при массовом выводе из БД.


 
evvcom ©   (2004-04-27 16:18) [1]

А чем первичный поток не нравится?


 
Digitman ©   (2004-04-27 16:27) [2]


> P_Aleks ©   (27.04.04 16:16)  


форма - объект VCL,  трэд - объект ОС

"приделать" - понятие растяжимое


 
P_Aleks ©   (2004-04-27 16:28) [3]

Вывожу много информации на несколько форм из бд.
Тред занимается тем ,что вызывает Synchronize для каждой строки из Dataset. Теперь если попытаться прибить одну из многих форм,
то интерфейс виснет на некоторое время. Я так думаю ,
что vcl не успевает вовремя прибить форму.


 
Digitman ©   (2004-04-27 16:30) [4]


> Тред занимается тем ,что вызывает Synchronize для каждой
> строки из Dataset


ерундой он у тебя занимается


 
P_Aleks ©   (2004-04-27 16:30) [5]

Digitmanу Vcl он или или не Vcl а работает в конечном счете с тем же CreateWindow. И события обрабатывает  в том же цикле.


 
Тимохов ©   (2004-04-27 16:33) [6]


> конечном счете с тем же CreateWindow.

а вы знакто winapi, как я погляжу.
Может вам свою vcl написать - aleksVCL?
И события обрабатывать в том же цикле?


 
P_Aleks ©   (2004-04-27 16:42) [7]

Всётаки не до конца понятна агрессивная реакция Уважаемых.

А как лучше сделать выборку из бд, так чтобы User мог управлять процессом. И чем плох "Synchronize для каждой строки из Dataset" ?


 
Тимохов ©   (2004-04-27 16:45) [8]


> P_Aleks ©   (27.04.04 16:42) [7]
> Всётаки не до конца понятна агрессивная реакция

Если у тебя, что-то притормаживает, значит ты неверно делаешь synchronize. Например, в методе который ты передаешь в synchronize выполняется долгая работа, которая естественно делается в главном потоке. Если же ты продолжаешь утвержать, что через synchronize выводятся только результаты, то тогда хорошо бы видеть код...


 
Mim1 ©   (2004-04-27 16:46) [9]

> И чем плох "Synchronize для каждой строки из Dataset" ?

Дайте попробую угодать, тем что программа виснет :).

Сформируйте данные в масив, и передайте за один раз не вызывая этого метода для каждой из строк.


 
Digitman ©   (2004-04-27 16:48) [10]


> "Synchronize для каждой строки из Dataset"


это вообще зачем ? поясни ...

imho, дурь ...


 
P_Aleks ©   (2004-04-27 16:48) [11]

>Mim1 Сформируйте данные в масив, и передайте за один раз не вызывая этого метода для каждой из строк

Тогда Юзер не будет видеть процесс вывода(и не сможет его прервать). А он модет занять длительное время.


 
Тимохов ©   (2004-04-27 16:52) [12]


> P_Aleks ©   (27.04.04 16:48) [11]

А чем не удовлетворяет progressbar?
пользователь видет, что вывод идет.
Или ему нужно выдеть именно данные в строках?
Но это же ерунда какая-то - пользователи должны быть роботами Верторами, чтобы с уметь оценить инфу, которая перед ними мелькает и понять, что что-то их не удовлетворяет и решить прервать запрос.


 
P_Aleks ©   (2004-04-27 16:52) [13]

>Digitman это вообще зачем

Synchronize на добавление в какой нибудь отчет (listview, VirtualtreeView).Eсли добалять напрямую, то получаем проблемы совместного доступа потоков. По CriticalSession тоже не стоит,
я не смогу перекрыть все обращения к этим отчетам.


 
Digitman ©   (2004-04-27 16:52) [14]


> P_Aleks


тебе, кажется , неведомо, что есть "курсор НД"

твой вопрос в "Базы данных" следовало размещать, там тебя научат ..

до потоков тебе еще - как до Китая


 
Тимохов ©   (2004-04-27 16:54) [15]

добавляй порциями - по 100 штук.


 
Digitman ©   (2004-04-27 16:57) [16]


> P_Aleks


начерта юзеру контролировать ход формирования данных отчета ?
пусть НД, на базе которого д.б. сгенерирован отчет, будет сформирован в отдельном треде, а уж ПОЛНЫЙ результат передан механизму генерации отчета в осн.потоке ... и никакой синхронизации не требуется в этоми случае


 
P_Aleks ©   (2004-04-27 17:00) [17]

Тимохов> Если у тебя, что-то притормаживает, значит ты неверно делаешь synchronize

Сам вывод  быстрый.
Но когда я пытаюсь прибить одну из 5-10 форм(тестирую), которая в свою очередь прибивает свой поток вывода из бд
(
  FFilltread.Terminate;
  FFilltread.WaitFor;

  FFilltread.Free;

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


 
Тимохов ©   (2004-04-27 17:03) [18]

а вы знаете сколько положено висеть waitfor - он может висеть бесконечно.

может вам не ждать его окончания?
Т.е. просто termiante и пошли дальше (только поставить freeonterminate := true).


 
P_Aleks ©   (2004-04-27 17:12) [19]

Тимохов> просто termiante и пошли дальше

Это я уже пробовал. - тот же результат.
Поток себя прибивает а форма висит еще некоторое время.

Думаю придется серьезно менять прогу. Видимо так не стоит делать.
Попробую идею Digitman с кешем.

Спасибо!



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

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

Наверх





Память: 0.49 MB
Время: 0.032 c
1-1083254115
van20
2004-04-29 19:55
2004.05.16
RxLib для Delphi7


14-1083208481
тихий вовочка
2004-04-29 07:14
2004.05.16
Ole


7-1080806222
snake1977
2004-04-01 11:57
2004.05.16
Список установленных шрифтов


11-1068822136
SPeller
2003-11-14 18:02
2004.05.16
Предложение по устройству KOL.PAS


8-1077630800
Pavelius
2004-02-24 16:53
2004.05.16
Алгоритм нахождения контура и очистки изображения от мусора





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский