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

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

TSocketConnection - познее связывание - - в другом потоке. [D7, WinXP]


Страницы:   1 2 3

tytus ©   (2007-07-03 10:22:00) 

Доброго дня мастера. Вот собственно и тема - хочу выполнять методы сервера в отдельном потоке+показать форму выполнения.
В главном приложении есть TSocketConnection (Connect1) и TClientDataSet (CDS1).
В конструкторе потока передаю и Connect1 и CDS1.
...
Constructor WaitThread.Create(AConnect:TSocketConnection;ADataSet:TClientDataSet);
begin
FConnect:=AConnect;
FDataSet:=ADataSet;
inherited create(false);
end;

procedure Execute;
begin
FConnect.AppServer.МойМетод;
end;

вот на такой код делфи ругаеццо:EVariantInvalidArgError,
а если запускать екзешник - то Error reading from Socket.
Как правильно сие сделать...


ага   (2007-07-03 14:43:00) [21]

to Сергей М. ©

Я вот про ето:
"Сергей М. ©   (03.07.07 11:42) [4]

> нереально передать в поток уже подключенный SocketConnection?

Реально. Криминала никакого в этом нет."

Можна - покажи как.

>>>TSocketConnection использует свой собственный маршаллинг.

Ага. Для передачи через свое сокетное соединение и тока. Притом еще всякие объекты создает, списки заполняет, и без всякой межпоточной синхронизации.


Сергей М.   (2007-07-03 14:12:00) [22]


> ага   (03.07.07 13:54) [22]
>
> Да низя так делать


Можно.

TSocketConnection использует свой собственный маршаллинг.


ага   (2007-07-03 13:54:00) [23]

Да низя так делать. Можно тока маршальнуть интерфейс в другой поток, и то тоrа при STA, да вот толку с того чуть, вызов все одно пойдет через майн нить.


Сергей М.   (2007-07-03 13:49:00) [24]


> тоже самое правится в RDM_TLB


Редактор при манипуляциях с интерфейсами делает синхроннуюправку сразу двух юнитов - RDM и TLB. На то он и предоставлен разработчиками.

Зачем же делать это ручками, если это чревато ошибками, тем более когда знаний на эту тему не хватает ?


tytus   (2007-07-03 13:44:00) [25]

>Сергей М. ©   (03.07.07 13:36) [19]
списобо за книгу, будем посмотреть...
>Сергей М. ©   (03.07.07 13:30) [18]
редактор сам
дык... тоже самое правится в RDM_TLB...


Сергей М.   (2007-07-03 13:36:00) [26]


> или книгу какую по-вразумительнее


Эрик Хармон, "Разработка COM-приложений в среде Delphi"


Сергей М.   (2007-07-03 13:30:00) [27]


> да нет же не кирилицей есессно


Ну а что ж тогда про иероглифы [8] начал ?)


> как правильно выполнять методы сервера в другом потоке через
> позднее связываение


1. Методы диспинтерфейса должны иметь соглашение о вызове safecall

2. Добавлять методы нужно не через анус (Edit -> Add to interface), а специально  существующими на то средствами редактора библ-ки типов (New -> Method/Property) - редактор сампроизведет все необходимые изменения в RDM-юните.


tytus   (2007-07-03 13:18:00) [28]

>Anatoly Podgoretsky ©   (03.07.07 13:12) [16]
-))
tytus ©   (03.07.07 13:03) [13]


Anatoly Podgoretsky   (2007-07-03 13:12:00) [29]

> чтоб не вводить в заблуждение названием реальных методов

Да ну


tytus   (2007-07-03 13:07:00) [30]

>Сергей М. ©   (03.07.07 13:04) [14]
tytus ©   (03.07.07 13:03) [13]


Сергей М.   (2007-07-03 13:04:00) [31]


> Затем Edit->Add to interface и вписываю сию процедурку


Да щщас !

А это что

"... invalid character #204 found"

?

Эта ошибка ЗАКОНОМЕРНА. если твой метод называется "Мойметод"


tytus   (2007-07-03 13:03:00) [32]

>Сергей М. ©   (03.07.07 12:55) [12]
..да нет же не кирилицей есессно -))))) ну написал МойМетод - чтоб не вводить в заблуждение названием реальных методов... как видно  - получилось как всегда..
А все-таки - Сергей М. - не подскажите ли как правильно выполнять методы сервера в другом потоке через позднее связываение используя TSocketConnection?
Можно ссылочку на толковые статьи (с примерами желательно)...или книгу какую по-вразумительнее..


Сергей М.   (2007-07-03 12:55:00) [33]


> в protected пишу процедурку (она же мой метод)


Прямо кириллицей пишешь ?! И компилятор это спокойно пропускает ?!

Не надо уж лапшу-то вешать)


tytus   (2007-07-03 12:40:00) [34]

>Сергей М. ©   (03.07.07 12:10) [9]
интересно - а как вообще люди делают трехзвенку????
Я создал RemoteDataModule.
Затем сохранил прожект, и F9 - и вуаля - сервачег зарегистрировался!
Супер - неправда ли?
Затем добавил форму - File->New->Form... связал модули и.т.п.
Как я добавлял методы сервера? Лехко и проста!
в protected пишу процедурку (она же мой метод) с директивой safecall;
Затем Edit->Add to interface и вписываю сию процедурку.
Сохраняем, запускаем... и о чудо!!! далее думаю ненужно....

>Сергей М. ©   (03.07.07 12:14) [10]
нет недумал...времени нехватает...


Сергей М.   (2007-07-03 12:14:00) [35]


> кроме ухода в сторону от основной темы вопроса


А ты задумался над смыслом, заложенным в название ид-ра EVariantInvalidArgError ?


Сергей М.   (2007-07-03 12:10:00) [36]


> что это меняет ?


Это сразу вызывает вопрос - каким образом ты умудрился под Д7 скомпилировать декларацию интерфейса

IMyAppServer = interface(IAppServer)
..
 procedure МойМетод;
..
end;

?


tytus   (2007-07-03 12:03:00) [37]

>Сергей М. ©   (03.07.07 12:00) [7]
... да хоть китайские иероглифы - что это меняет ? кроме ухода в сторону от основной темы вопроса...


Сергей М.   (2007-07-03 12:00:00) [38]


> tytus ©   (03.07.07 11:50) [6]


У тебя что, метод интерфейса содержит символы кириллицы ?


tytus   (2007-07-03 11:50:00) [39]

>Anatoly Podgoretsky ©   (03.07.07 11:45) [5]
а потму позднее, что не подключаю модуль ...TLB сервера, где описаны его методы а просто делаю FConnect.AppServer.МойМетод;
Как же с основным вопросом?


Anatoly Podgoretsky   (2007-07-03 11:45:00) [40]

> tytus  (03.07.2007 11:23:03)  [3]

А где здесь позднее связываение?


Страницы:   1 2 3

Наверх

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