Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 7

Мультипоточность , работа с OLE объектами

16.02.2016, 23:40. Показов 1142. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ как боротся со след. проблемом?

Короче,
при начале создается ОЛЕ объект (Точнее 1С Апплкейшн)
Обращение на хэндл 1С из друго потока вызывает исключение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
TDBMS.Start:Booleaan;
var sInfo:String;
begin
        
         exe1C:=CreateOLEObject(progID);//V83.Application
         exe1C.Connect(cnnstr);
         handler_1C:=exe1C;
 
        // handler_1C pblic  член класса  TDBMS
         handler_1C.ModInfo.GetData('test',sInfo);//Тут Работает нормално
        
 
       sockTCPServer:=TIdTCPServer.Create(nil);
       sockTCPServer.OnExecute:=sockTCPServerExecute;
       sockTCPServer.OnConnect:=sockTCPServerConnect;
       sockTCPServer.OnStatus:=sockTCPServerStatus;
       sockTCPServer.OnDisconnect:=sockTCPServerDisconnect;
       sockTCPServer.DefaultPort:=3045;
       sockTCPServer.Active := True;
       sockTCPServer.StartListening;
        
end;
//------------
 procedure TDBMS.sockTCPServerExecute(AContext: TIdContext);
     var sData,sInfo:String;
   begin
      try
         sData:=AContext.Connection.IOHandler.ReadLn;
         if trim(sData)<>'' then
         begin
            //Если  Без CoInitialize(nil); Тогда ругается, что  CoInitialize has not been called
            //Если с  CoInitialize(nil); Тогда ругается, что   The application called an interface that was marshalled for a 
different thread
        
             CoInitialize(nil);// 
             handler_1C.ModInfo.GetData('test',sInfo);//Ругается
 
         end;
 
      Except
      ON e:Exception do
      end;
   end;
Добавлено через 41 минуту
Солвед.
Может кому-нибудь годится
Надо было
Delphi
1
2
3
4
5
6
7
8
9
 TTHread.Synchronize( nil,
                    procedure
                     begin
                      GetData( 'test);
                     end);
 
 
TDBM. GetData(Const sDataIString);
   handler_1C.ModInfo.GetData('test',sInfo);
Там, где ругается и без CoInitialize
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.02.2016, 23:40
Ответы с готовыми решениями:

Работа в отчетах с объектами OLE и вложениями
Добрый всем день! При формировании отчетов встретился с такой проблемой. Если использую для отчета объекты OLE (документы Word), то...

Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена
OleDbConnection cn = new OleDbConnection(&quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&quot; +...

Работа с объектами
Помогите решить проблему. Функция a() должна создать новый объект такой же структуры как аргумент и в этом новом объекте приплюсовать 2. ...

8
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.02.2016, 08:30
Цитата Сообщение от Beralus2 Посмотреть сообщение
Солвед.
Может кому-нибудь годится
Надо было
Мудрец премудрый)
У тебя задача как стояла ?
Вот как:
Обращение .. из друго потока
А твоё "надо было" в результате обращается из того же потока, который и создал олей-объект.
Со всеми втекающими и вытекающими незавидными последствиями для дополнительного потока.
0
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 7
17.02.2016, 17:06  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
А твоё "надо было" в результате обращается из того же потока, который и создал олей-объект.
Со всеми втекающими и вытекающими незавидными последствиями для дополнительного потока
Незнаю. Я не так уж герой . Но из за мата думал, что TIdTCPServer сам создает какой то злой поток. (
это вполнее вереятно). И обращает к OnExecute.
Думал TDBMS.sockTCPServerExecute вызывается из друго потока.
Все- таки с помощю
Delphi
1
2
3
4
5
TTHread.Synchronize( nil,
                    procedure
                     begin
                      GetData( 'test);// Или любой другой метод (Либо юзает ОЛЕ фигня  либо нет) 
                     end);
скандал закончено
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.02.2016, 19:12
Цитата Сообщение от Beralus2 Посмотреть сообщение
Думал TDBMS.sockTCPServerExecute вызывается из друго потока
Так оно и есть.
0
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 7
17.02.2016, 19:54  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Цитата Сообщение от Beralus2 Посмотреть сообщение
Думал TDBMS.sockTCPServerExecute вызывается из друго потока
Так оно и есть.
Вот и все со всеми фейри тейлс-ами
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.02.2016, 19:56
Ну так а нафига ты создаешь олей-объект в основном потоке ?
Создавай его прямо в дополнительном и пользуй на здоровье безо всяких синхронизаций)
0
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 7
17.02.2016, 20:12  [ТС]
Потому что Хэндл( так назовем) 1С-а буду ползоватся в основном потоке .
Поетому создал ОЛЕ в основном потоке. И плюс есть функция
isConnected класса TDBMS который вызывается до создание ТСП сервера и проверяет получилось ли подключится
к 1С ( если удается подключить к 1С не уничтажаю хендл, и планирую юзать на дальнейшей работе(потому что подключение займет значительное время ), но не знаю , что принцип правильный или нет )

handler_1C -есть протектед член класса TDBMS
0
3530 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
17.02.2016, 20:17
Цитата Сообщение от Beralus2 Посмотреть сообщение
Потому что Хэндл( так назовем) 1С-а буду ползоватся в основном потоке .
Поетому создал ОЛЕ в основном потоке
Да и пользуй себе на здоровье !)
А в дополнительном создавай отдельный объект и пользуй его напрямую , без синхронизации.
0
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 7
17.02.2016, 22:37  [ТС]
Цитата Сообщение от mss Посмотреть сообщение
Да и пользуй себе на здоровье !)
Тхенькс.
Цитата Сообщение от mss Посмотреть сообщение
А в дополнительном создавай отдельный объект и пользуй его напрямую , без синхронизации.
А ето проводит к запущение 2 экземпляра 1С-а . Это не желательно. А в чем недостатки синхронизации если не серет?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.02.2016, 22:37
Помогаю со студенческими работами здесь

Работа с объектами
Доброго времени суток, уважаемые форумчане! Интересует такой вопрос: обязательно ли удалять объекты, созданные &quot;ручками&quot; при...

Работа с объектами
Разъясните пожалуйста, создаётся слайдер в script-файле $(document).ready( function(){ $('.header_slider2').bxSlider({ ...

Работа с объектами
Добрый вечер, у меня есть очень много обьектов на экране, нужно проверять, если нажата кнопка мыши на одном из обьектов, то менять его цвет...

Работа с объектами
Здравствуйте! Выручайте нубяру, есть объект со свойством $user-&gt;task_1 и есть ещё один объект со свойством $task-&gt;id, который...

Работа с объектами
Здравствуйте, делаю курсовую по работе с датами, их вычитанием и сложением. Вообще в начале у меня идет процесс инициализации даты,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru