Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Indy10 + Thread [D7, WinXP]


Страницы:   1 2

Lilu ©   (2006-10-17 10:08:00) 

Подскажите пожалуйста как синхронизировать потоки главный и idServerExecute (indy 10). Если синхронайзом, то где в idServer-е тот поток котрый активный?


umbra   (2006-10-17 12:41:00) [21]

Нашел! Собственно поток представляет св-во TIdContext.Yarn


Lilu   (2006-10-17 12:29:00) [22]


> Что мешает доп.потоку создать свои собственные объекты доступа
> к объектам БД ?

ничего не мешает :) только это не в этом цель поставленой задачи.
метод основного потока, реализует нехилый алгоритм,- работает со всевозможными СУБД и реализовать его работу в другом потоке возможно но неправильно.


Сергей М.   (2006-10-17 12:24:00) [23]

В OnConnect:

- создать IBDataBase, IBTransaction, IBDataSet/IBQuery/IBTable, связать и настроить их как положено

В OnExecute обращаться к своимкомпонентам доступа, а не к компонентам доступа, используемым осн.потоком


Сергей М.   (2006-10-17 12:21:00) [24]

Что мешает доп.потоку создать свои собственныеобъекты доступа к объектам БД ?


Lilu   (2006-10-17 12:19:00) [25]


> > Есессено Запись таблицы не работает
>
>
> Это почему же "есессно" ?

потому как с этой таблицей (в которую я собираюсь загнать данные) работает основной поток


Lilu   (2006-10-17 12:15:00) [26]


> да, чего-то я загнался. :) Обработчик сервера уже выполняется
> в контексте потока. к нему не надо обращаться, Вы уже в
> нем

Круто! я в нем,  только как мне вызывать метод основного потока?


Сергей М.   (2006-10-17 12:12:00) [27]


> Есессено Запись таблицы не работает


Это почему же "есессно" ?


umbra   (2006-10-17 12:10:00) [28]

да, чего-то я загнался. :) Обработчик сервера уже выполняется в контексте потока. к нему не надо обращаться, Вы уже в нем.


Lilu   (2006-10-17 12:09:00) [29]

Сергей М. :))))  я понимаю и там и там(9,10) создаются потоки для каждого соединения, возможно даже к ним можно обратиться, но как?


Lilu   (2006-10-17 12:06:00) [30]

Я не понимаю почему этот вопрос нигде не освещен :(
у меня есть idTCPServer, функции которого- принять инфу и запихать ее в БД.
Методы работы с БД лежат в основном потоке.

procedure TDM.IdTCPServer1Execute(AContext: TIdContext);
begin
...
SSize := AContext.Connection.IOHandler.ReadInteger;
AContext.Connection.IOHandler.ReadStream(idStrm, SSize);

tb.LoadFromStreamViaFormat(Strm, GS.BSF_Data);
Запись таблицы(метод основного потока)
...
Дисконнект
end;

Есессено Запись таблицы не работает, подскажите как синхронизировать потоки?


Сергей М.   (2006-10-17 12:03:00) [31]


> Lilu   (17.10.06 11:53) [7]


Не суть как важно.
И там и там есть доп.потоки, ассоциированные с активными соединениями.


Lilu   (2006-10-17 11:53:00) [32]

Сергей М. , 9 с 10 сильно различаются :(


Lilu   (2006-10-17 11:49:00) [33]


> в обработчик события OnConnect передается параметр Context,
>  через который и можно обратиться к потоку , который создается
> при коннекте

AContext: TIdContext

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


Сергей М.   (2006-10-17 11:46:00) [34]


> umbra ©   (17.10.06 11:29) [4]


> который создается при коннекте


Точнее - берется у ThreadMgr'а (новый или один из уже существующих и свободных в пуле)


umbra   (2006-10-17 11:29:00) [35]

в обработчик события OnConnectпередается параметр Context, через который и можно обратиться к потоку , который создается при коннекте


Сергей М.   (2006-10-17 11:23:00) [36]


> Lilu   (17.10.06 10:39) [2]


Как в 10-ке - не знаю, а в 9-ке обработчик OnExecute вызывается с параметром AThread: TIdPeerThread, это и есть искомый поток.

Только вот к его Synchronize-методу добраться просто так не удастся - метод этот, как известно, protected. Придется писать и задействовать свой менеджер потоков (см. св-во TIdTCPServer.ThreadMgr). Гораздо проще будет осуществлять синхронизацию доп.потока с осн.потоком отправкой синхр.сообщений окну осн.потока.


Lilu   (2006-10-17 10:39:00) [37]


> TCriticalSection?

а как обратиться к потоку, созданному при connect-е idServer-а ?


Орион   (2006-10-17 10:10:00) [38]

TCriticalSection?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо