Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.08.2011, 23:47
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию запросы в плагины

заметил у себя в программе после некоторого числа вызовов функции из плагина, она перестает выполнять этот вызов.
Вызов происходит в потоке (TTread)
Решил циклом попробовать сразу 50 раз выполнить
и выдает такое

решил что все из за одновременного запроса в плагин из потока, и соответственно переставало выполняться после случайного такого же случая,
пробовал использовать критическую секцию, так без ошибок если циклом, в программе не пробовал, но не устраивает, иногда бывает вызов функции в другой плагин которая выполняется дольше и приходится ждать когда запросы в другие плагины могли бы выполниться.
Поэтому хочу спросить если кто то понял мою проблему, как быть? не уж то отказываться от плагинов и переносить все в программу?
Или же причина ошибки не в одновременном вызове функции из плагина?

Последний раз редактировалось ALexandr555, 04.08.2011 в 00:03.
Ответить с цитированием
  #2  
Старый 04.08.2011, 00:07
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Этого окошечка мало, чтобы понять причину. Может у тебя что то не освобождается?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 04.08.2011, 00:14
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

да нет, там освобождать нечего то
как тогда объяснить
Цитата:
пробовал использовать критическую секцию, так без ошибок
да и конфликт есть если лезть в плагин из потоков?

Последний раз редактировалось ALexandr555, 04.08.2011 в 00:19.
Ответить с цитированием
  #4  
Старый 04.08.2011, 00:23
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну я ведь не телепат, попробуй всё-таки отловить где косяк. Понаставь try...except.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 04.08.2011, 00:44
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

конфликт вобще есть если лезть в плагин из потоков?
Ответить с цитированием
  #6  
Старый 04.08.2011, 00:47
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Ну я так понимаю ловить нужно в плагине.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 04.08.2011, 01:10
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

если выполняется один раз, никаких проблем сколько не делай запрос=> с этого вывод что с плагином все впорядке!
если в циклом раза 2 и более то уже ошибка

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

Код:
 CriticalSection.Enter;
 @plugExec := GetProcAddress(PPluginInfo(listKomand.Items[n1])^.handle,'PluginExec');
 Result:=PlugExec(Pul, Tag,PPluginInfo(listKomand.Items[n1])^.Index);
 CriticalSection.Leave;

не ужели вам не кажется что все из за одновременного запроса в потоке?
Ответить с цитированием
  #8  
Старый 04.08.2011, 01:31
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ALexandr555
если выполняется один раз, никаких проблем сколько не делай запрос=> с этого вывод что с плагином все впорядке!
Какая наивность.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 04.08.2011, 02:02
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

я имею ввиду не в целом 1 раз, а не частый вызов, не несколько раз в секунду, а 1,
перенесу плагина код в программу и посмотрю как себя поведет

да и все же почему вы ничего не говорите по поводу того что в критической секции все хорошо?

Последний раз редактировалось ALexandr555, 04.08.2011 в 02:08.
Ответить с цитированием
  #10  
Старый 04.08.2011, 02:24
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от ALexandr555
да и все же почему вы ничего не говорите по поводу того что в критической секции все хорошо?
Не знаю, что ответить.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 04.08.2011, 02:37
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

вобщем кажется при переносе из плагина в программу, все нормально
так что по прежнему думаю конфликтовал запрос в плагинв потоке
если бы этот код был в плагине конечно хорошо, но что ж поделать
Ответить с цитированием
  #12  
Старый 04.08.2011, 02:44
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Я так понимаю, что когда выполняется один запрос, в этот момент может придти другой? Критическая секция запрещает такое своеволие, если не подходит критическая секция попробуй сделать эмуляцию. Создай где-нибудь флаг, который будет указывать что плагин занят и не позволять "нити" вызывать его повторно. Но это только эмуляция, этим должна заниматься критическая секция.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #13  
Старый 04.08.2011, 03:08
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Цитата:
что когда выполняется один запрос, в этот момент может придти другой
а я о чем говорил если в потоках,
да критическая и не давала этому произойти,
мне так нужно будет следить за несколькими плагинами, что геморно, проще в потоке не вызывать из плагина, а выполнять нужный код
Ответить с цитированием
  #14  
Старый 04.08.2011, 11:07
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Как я писал выше:
Цитата:
Сообщение от angvelem
... Создай где-нибудь флаг, который будет указывать что плагин занят и не позволять "нити" вызывать его повторно. ...
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #15  
Старый 04.08.2011, 11:48
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

использование в программе так же повышает скорость выполнения, нежели было в ожидании
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:14.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025