Конференция "Начинающим" » Доступ к переменной главного потока?
 
  • d@vinchi © (22.09.09 10:30) [0]
    Вопрос для большинсва детский, но я впервые сталкиваюсь так плотно с потоками и данной ситуацией. В общем приложение является службой. В обработчике создания службы создается TServerSocket и средствами DAO xxx.mdf база данных для ведения логов. В обработчике TServerSocket.OnClientRead происходит анализ полученных данных и при необходимости запись в БД. Если в обработчике TServerSocket.OnClientRead к БД обращаться через глобальные переменные, то возникает ошибка "неверный адрес...". Если БД создавать не в TService.OnCreate, а в обработчике TServerSocket.OnClientRead, то обращение и запись данных проходит етественно нормально, НО при интенсивном потоке входящих данных все это происходит долго, т.к. каждый раз происходит создание объекта DAO, открытие БД, открытие RecordSet.
    Предпологаю что проблема в доступе к переменной главного потока из дочернего потока - какое решение применяется в этой ситуации?
  • Сергей М. © (22.09.09 11:38) [1]

    > проблема в доступе к переменной главного потока из дочернего
    > потока


    Обращения именно из дочернего потока из объяснения не очевидны
  • Сергей М. © (22.09.09 11:54) [2]

    > В обработчике создания службы создается TServerSocket


    Активируется там же ?
    Значит обработчики всех событий TServerSocket вызываются в осн.потоке, потому что обработчик TService.OnCreate/OnDestroy вызвается именно в основном. Все прочие события TService возбуждаются в доп.потоке.
  • d@vinchi © (22.09.09 12:07) [3]
    Активируется в OnStart, из него же вызывается метод записи лога в котором возникает ошибка... Т.е. если перенести активацию TServerSocket  в OnCreate службы событие OnClientRead будет возникать в основном потоке службы - я правильно понял?
  • Сергей М. © (22.09.09 12:21) [4]
    Правильно.
  • d@vinchi © (22.09.09 13:41) [5]
    Спасибо! все получилось после небольших переделок...
  • Сергей М. © (22.09.09 13:51) [6]

    > все получилось


    И теперь у тебя вся ключевая функциональность сервиса работает в осн.потоке ?
    Ну и какой тогда смысл в использовании именно сервиса ?
 
Конференция "Начинающим" » Доступ к переменной главного потока?
Есть новые Нет новых   [134434   +30][b:0][p:0]