![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Indy10 + Thread [D7, WinXP]
Lilu © (2006-10-17 10:08:00)Подскажите пожалуйста как синхронизировать потоки главный и idServerExecute (indy 10). Если синхронайзом, то где в idServer-е тот поток котрый активный?
umbra (2006-10-19 10:41:00) [1]см. umbra © (17.10.06 15:20) [26]
Сергей М. (2006-10-19 08:07:00) [2]значит у тебя ошибка в программе
Lilu (2006-10-18 17:50:00) [3]так не работает
Сергей М. (2006-10-18 09:18:00) [4]
> отдельную от чего?
Отдельную от всего)
Просто некую ф-цию. например:
function DoSomeThingWithDatabase(DB: TIBDatabase; TA: TIBTransaction): SomeResult;
begin
..
end;
> то есть потоки синхронизировать не нужно
Конечно не нужно !
Lilu (2006-10-18 08:59:00) [5]
>cоздать отдельную ф-цию
отдельную от чего?
> собственный набор объектов доступа к БД и вызывает ту самую
> функцию со своими объектами-параметрами
то есть потоки синхронизировать не нужно.
Сергей М. (2006-10-18 08:37:00) [6]
> создавать эти компоненты в потоке соединения повторно ..не по программистски.
Еще как "по-программистски" !
> копировать код процедуры1 не по программистски
А вот это действительно "не по-программистски".
По-программистски же будет создать отдельную ф-цию, реализующую тот самый "нехилый алгоритм" и принимающую параметрами конкретные экз-ры компонентов доступа к БД, с которыми этот "нехилый алгоритм" и будет работать при вызове ф-ции. Каждый поток, заинтересованный в выполнении этого алгоритма, создает свой собственный набор объектов доступа к БД и вызывает ту самую функцию со своими объектами-параметрами.
Lilu (2006-10-18 05:15:00) [7]
> Жду ответа на свой вопрос - почему "неправильно" ...
может я что-то непонимаю... предположим для выполнения процедуры1 в основном потоке я использую IBTable, OraTable, ZTable и еще кучу других компонент(может порекомендуете ADO, но настройки ... ) и создавать эти компоненты в потоке соединения повторно + копировать код процедуры1 не по программистски.
Anatoly Podgoretsky (2006-10-17 21:30:00) [8]
> поймать бы того гада, который thread в первый раз "потоком"
> обозвал... %-)
Поздно пить шампанское.
Сергей М. (2006-10-17 16:15:00) [9]
> umbra © (17.10.06 15:51) [28]
С привычкой бороться сложно и глупо.
И все же файбер - это волокно, т.е. составляющая нити, а не собственно нить.
Ketmar (2006-10-17 15:57:00) [10]>[28] umbra(c) 17-Oct-2006, 15:51
поймать бы того гада, который thread в первый раз "потоком" обозвал... %-)
umbra (2006-10-17 15:51:00) [11]2 Сергей М. © (17.10.06 15:29) [27]
для себя я всегда перевожу thread как поток, а fiber как нить. Привычка, однако :)
Сергей М. (2006-10-17 15:29:00) [12]
> umbra © (17.10.06 15:19) [25]
> потоки или нити
Э-э-э ...
М.б. таки будет правильней "нити или волокна" ?
umbra (2006-10-17 15:20:00) [13]
> Yarn в моей Indy наследник TObject причем никаких новых
> ни свойст ни методов
Экземпляром какого именно класса будетYarnв рантайме зависит от того, что использует сервер - потоки или нити. По умолчанию это потоки иYarnбудет экземпляромTIdThread. Так что см. справку дляTIdThread
umbra (2006-10-17 15:19:00) [14]
> Yarn в моей Indy наследник TObject причем никаких новых
> ни свойст ни методов
Экземпляром какого именно объекта будетYarnв рантайме зависит от того, что использует сервер - потоки или нити. По умолчанию это потоки иYarnбудет экземпляромTIdThread. Так что см. справку дляTIdThread
Сергей М. (2006-10-17 14:19:00) [15]
> Пока сделала через CriticalSection
Тебя поджидает засада.
> > реализовать его работу в другом потоке возможно но неправильно
Жду ответа на свой вопрос - почему "неправильно" ...
По поводу же синхр.сообщений окну осн.потока как варианту синхронизации - рекомендация (как разумная альтернатива для Win) остается в силе
Lilu (2006-10-17 14:15:00) [16]в общем Yarn в моей Indy наследник TObject причем никаких новых ни свойст ни методов
type
TIdYarn = class(TObject)
protected
public
end;
:( и syncronize у него не наблюдается.
Нашла IdTCPServer1.Contexts - список потоков, мож через него что нить можно сделать?!
Пока сделала через CriticalSection. Пока все работает.
Но с синхронизацией хотелось бы разобраса.
Сергей М. (2006-10-17 13:49:00) [17]
> umbra © (17.10.06 13:42) [21]
Тады умываю руки.
umbra (2006-10-17 13:42:00) [18]Сергей М. © (17.10.06 12:46) [20]
опубликован.
Сергей М. (2006-10-17 12:46:00) [19]
> umbra © (17.10.06 12:41) [18]
Если у этого самого Yarn как наследника TThread метод syncronize не обубликован, то ситуация ничем не отличается от изложенной в [3]
Сергей М. (2006-10-17 12:43:00) [20]
> метод основного потока
Давай быть точнее - у потоков как у ОС-объектов нетникаких "методов".
> реализовать его работу в другом потоке возможно но неправильно
И почему же ? Аргументируй ...
Тебя не смущает, что при реализации синхронной логики клиентские запросы будут обслуживаться последовательно, в то время как эти запросы могут быть "тяжелыми" и/или длительными ?