|
Модераторы: Poseidon, Snowy, bems, MetalFan |
|
neweraser |
|
||||||||||||
Опытный Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
Всем привет!
Программа подключается к базе и индексирует содержимое одной из таблиц. Чтобы программа не подвисала, решил все это дело сделать в потоке. Класс потока:
В OnCreate главной формы настраиваю TFDConnection и запускаю поток:
Немного поясню, TQueryThread.Create('AllEmpls') - создает поток и передает ему "дальнейшие действия", т.е. загрузка всех сотрудников:
А здесь обновляю статусы:
Вопрос вот в чем, правильно ли я все делаю и как обратиться к FDQuery, допустим, вызвать FDQuery.Next из основного окна по нажатию кнопки, как найти сотрудника по ID? Это сообщение отредактировал(а) neweraser - 10.4.2018, 17:29 -------------------- Кто ищет, тот всегда найдет. |
||||||||||||
|
|||||||||||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
Какие то не понятные выпендрёжи с потоками (вы сами хоть понимаете что там происходит ?)
А в итоге какая то база (неизвестная, но думаю стандартная для студентов) и вопрос как в этой базе что то найти... Причем с помощью компонентов делфи (который уже мёртв... поверь мне). Если решил через компоненты, то вообще непонятно откуда в твоём коде взялись запросы... Там же же все через "next", "property" и т.п. делается |
|||
|
||||
neweraser |
|
||||
Опытный Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
Если бы не понимал - так не стал бы расписывать, и если нужны потоки, значит в программе им место. А вам если нечего ответить по теме - можно было пройти мимо и не выпендриваться
А разве это имеет какое-то значение? Для студентов или рабочий проект? Я тоже так думал, но, поверь мне, нет Где там? зы. Большая просьба отвечать по теме, либо вообще не отвечать, или натолкните меня на путь правильный) зызы. Да, да. Мне надо именно через потоки. -------------------- Кто ищет, тот всегда найдет. |
||||
|
|||||
Romikgy |
|
|||
Любитель-программер Профиль Группа: Участник Клуба Сообщений: 7325 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
корректная работа с потоками должна быть чем аналогичным Synchronize
в вашем варианте кода , эффективность минимальна (если запросы не выполняются к базе долго) ИМХО обращение по ссылкам из потока вообще очень проблематично (т.е. даже более потоконебезопасно) -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
neweraser |
|
|||
Опытный Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
Таблица в базе довольно большая, индексация занимает больше минуты. Хотелось бы видеть это в отдельном потоке, что я и сделал, чтобы не висела форма. О других запросах речи пока нет, вопрос в том, как теперь обратиться из основного потока программы к дочернему потоку, в котором на данный момент загружен и проиндексирован FDQuery. -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
Romikgy |
|
|||
Любитель-программер Профиль Группа: Участник Клуба Сообщений: 7325 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
http://gurin.tomsknet.ru/delphithreads.html
это работа с потоками обращаться надо через мутексы или чем то подобным -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
neweraser |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
Немного переписал код:
Form1.OnCreate
Класс потока
Execute потока
Но вопрос остается тем же. Использовать waitfor? Или может из основного потока передавать дочернему параметр и suspended = false? Потом как только поток обработает этот параметр - возвращаться через goto к suspend? Как-то кривовато получается... Добавлено через 1 минуту и 48 секунд Romikgy, спасибо, сейчас посмотрю -------------------- Кто ищет, тот всегда найдет. |
||||||
|
|||||||
Romikgy |
|
|||
Любитель-программер Профиль Группа: Участник Клуба Сообщений: 7325 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
исполняется один раз в конце делать суспенд бессмысленно для обращения из главного потока к дочернему надо использовать что то аналогичное или же сделать периодичный опрос дочерним потоком главного через Synchronize Это сообщение отредактировал(а) Romikgy - 11.4.2018, 09:47 -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
_zorn_ |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1077 Регистрация: 21.8.2007 Репутация: нет Всего: 12 |
Провакацилггый влпрос по беспатовке "а кроме паскали ты что нибудь знаешь ?" А мёртв он именно потому что у "заказчиков" тяму не хватает. Ну мля, пхп и то дальше ушел по развитию. ДЕЛФИ - это же ЫнтЫрпрайз. Стойте постойте. Вроде ЯВА на ЫНТЫРПРАЙЗЕ. Нах какой то не понятный язык учить если есть ЯВА ? ) |
|||
|
||||
Romikgy |
|
|||
Любитель-программер Профиль Группа: Участник Клуба Сообщений: 7325 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
дык и ява не панацея....
имхо офтопим, даже по разделу... -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |