Конференция "Сети" » Создание объектов в потоках TSocketServer
 
  • victorgugo (22.02.10 01:53) [0]
    Здравствуйте!
    Задача следующая: есть блокирующий TSocketServer. Соответственно при получении потока (GetThread) нужно для каждого этого потока создавать объекты доступа к БД, а при отключении - разрушать их. В главном модуле:
    procedure TForm1.ServerSocket1GetThread(Sender: TObject;
     ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
    begin
    SocketThread:=TServerThread.Create(True, ClientSocket);
    SocketThread.Priority:=tpLower;
    SocketThread.Resume;
    end;


    TServerThread - клас описанный в отдельном модуле, унаследованный от TServerClientThread.
    В процедуре ClientExecute класа TServerThread создаём компоненты доступа:
    IBTransaction1.Create(Application);
    IBDataBase1.Create(Application);
    IBQuery1.Create(Application);



    При компиляции ошибок не выдаёт, но как только подключается клиент:
    First chance exception at $7C812AFB. Exception class EAccessViolation with message 'Access violation at address 004A1B52 in module 'Project1.exe'. Read of address 00000EA8'. Process Project1.exe (1032)

    Вместо Application в IBTransaction1.Create(Application); пробовал и Form1 и другие компоненты, все время такая ошибка.

    Вопрос: как безболезнено создать объекты для потока сервера TServerSocket?

    Заранее спасибо
  • victorgugo (22.02.10 02:22) [1]

    > IBTransaction1.Create(Application);IBDataBase1.Create(Application);
    > IBQuery1.Create(Application);


    Вот что бывает, когда долго не пишешь на Делфи. Я уже и забыл как объекты создавать:
    IBTransaction1 := TIBTransaction.Create(Application);
    IBDataBase1 := TIBDataBase.Create(Application);
    IBQuery1 := TIBQuery.Create(Application);

    Всё работает))))
  • Сергей М. © (23.02.10 22:09) [2]
    > Всё работает

    До поры до времени.
    Грабли совсем близко.
  • victorgugo (24.02.10 00:17) [3]

    > До поры до времени.Грабли совсем близко.

    Может покажете где приблизительно эти грабли?
  • Сергей М. © (24.02.10 08:24) [4]
    В доп.потокее обращения к визуальным VCL-объектам недопустимы.
    Таким объектом в дан.случае является объект Application.
  • Slym © (24.02.10 11:00) [5]
    victorgugo   (22.02.10 2:22) [1]
    +1 [4]
    передавай nil Create(nil) если не знаешь зачем оно туда передается...
 
Конференция "Сети" » Создание объектов в потоках TSocketServer
Есть новые Нет новых   [134437   +30][b:0][p:0.001]