![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Indy10 + Thread [D7, WinXP]
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?