![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Доступ к переменной главного потока?
d@vinchi © (2009-09-22 10:30:00)Вопрос для большинсва детский, но я впервые сталкиваюсь так плотно с потоками и данной ситуацией. В общем приложение является службой. В обработчике создания службы создается TServerSocket и средствами DAO xxx.mdf база данных для ведения логов. В обработчике TServerSocket.OnClientRead происходит анализ полученных данных и при необходимости запись в БД. Если в обработчике TServerSocket.OnClientRead к БД обращаться через глобальные переменные, то возникает ошибка "неверный адрес...". Если БД создавать не в TService.OnCreate, а в обработчике TServerSocket.OnClientRead, то обращение и запись данных проходит етественно нормально, НО при интенсивном потоке входящих данных все это происходит долго, т.к. каждый раз происходит создание объекта DAO, открытие БД, открытие RecordSet.
Предпологаю что проблема в доступе к переменной главного потока из дочернего потока - какое решение применяется в этой ситуации?
Сергей М. (2009-09-22 13:51:00) [1]
> все получилось
И теперь у тебя вся ключевая функциональность сервиса работает в осн.потоке ?
Ну и какой тогда смысл в использовании именно сервиса ?
d@vinchi (2009-09-22 13:41:00) [2]Спасибо! все получилось после небольших переделок...
Сергей М. (2009-09-22 12:21:00) [3]Правильно.
d@vinchi (2009-09-22 12:07:00) [4]Активируется в OnStart, из него же вызывается метод записи лога в котором возникает ошибка... Т.е. если перенести активацию TServerSocket в OnCreate службы событие OnClientRead будет возникать в основном потоке службы - я правильно понял?
Сергей М. (2009-09-22 11:54:00) [5]
> В обработчике создания службы создается TServerSocket
Активируется там же ?
Значит обработчики всех событий TServerSocket вызываются в осн.потоке, потому что обработчик TService.OnCreate/OnDestroy вызвается именно в основном. Все прочие события TService возбуждаются в доп.потоке.
Сергей М. (2009-09-22 11:38:00) [6]
> проблема в доступе к переменной главного потока из дочернего
> потока
Обращения именно из дочернего потока из объяснения не очевидны