![]() |
|
#1
|
||||
|
||||
![]() заметил у себя в программе после некоторого числа вызовов функции из плагина, она перестает выполнять этот вызов.
Вызов происходит в потоке (TTread) Решил циклом попробовать сразу 50 раз выполнить и выдает такое ![]() решил что все из за одновременного запроса в плагин из потока, и соответственно переставало выполняться после случайного такого же случая, пробовал использовать критическую секцию, так без ошибок если циклом, в программе не пробовал, но не устраивает, иногда бывает вызов функции в другой плагин которая выполняется дольше и приходится ждать когда запросы в другие плагины могли бы выполниться. Поэтому хочу спросить если кто то понял мою проблему, как быть? не уж то отказываться от плагинов и переносить все в программу? Или же причина ошибки не в одновременном вызове функции из плагина? Последний раз редактировалось ALexandr555, 04.08.2011 в 00:03. |
#2
|
||||
|
||||
![]() Этого окошечка мало, чтобы понять причину. Может у тебя что то не освобождается?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
||||
|
||||
![]() да нет, там освобождать нечего то
как тогда объяснить Цитата:
Последний раз редактировалось ALexandr555, 04.08.2011 в 00:19. |
#4
|
||||
|
||||
![]() Ну я ведь не телепат, попробуй всё-таки отловить где косяк. Понаставь try...except.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
||||
|
||||
![]() конфликт вобще есть если лезть в плагин из потоков?
|
#6
|
||||
|
||||
![]() Ну я так понимаю ловить нужно в плагине.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
||||
|
||||
![]() если выполняется один раз, никаких проблем сколько не делай запрос=> с этого вывод что с плагином все впорядке!
если в циклом раза 2 и более то уже ошибка если использовать критическую секцию то все окей значит с плагином точно все впорядке Код:
CriticalSection.Enter; @plugExec := GetProcAddress(PPluginInfo(listKomand.Items[n1])^.handle,'PluginExec'); Result:=PlugExec(Pul, Tag,PPluginInfo(listKomand.Items[n1])^.Index); CriticalSection.Leave; не ужели вам не кажется что все из за одновременного запроса в потоке? |
#8
|
||||
|
||||
![]() Цитата:
![]() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#9
|
||||
|
||||
![]() я имею ввиду не в целом 1 раз, а не частый вызов, не несколько раз в секунду, а 1,
перенесу плагина код в программу и посмотрю как себя поведет да и все же почему вы ничего не говорите по поводу того что в критической секции все хорошо? Последний раз редактировалось ALexandr555, 04.08.2011 в 02:08. |
#10
|
||||
|
||||
![]() Цитата:
![]() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
||||
|
||||
![]() вобщем кажется при переносе из плагина в программу, все нормально
так что по прежнему думаю конфликтовал запрос в плагинв потоке если бы этот код был в плагине конечно хорошо, но что ж поделать |
#12
|
||||
|
||||
![]() Я так понимаю, что когда выполняется один запрос, в этот момент может придти другой? Критическая секция запрещает такое своеволие, если не подходит критическая секция попробуй сделать эмуляцию. Создай где-нибудь флаг, который будет указывать что плагин занят и не позволять "нити" вызывать его повторно. Но это только эмуляция, этим должна заниматься критическая секция.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#13
|
||||
|
||||
![]() Цитата:
да критическая и не давала этому произойти, мне так нужно будет следить за несколькими плагинами, что геморно, проще в потоке не вызывать из плагина, а выполнять нужный код |
#14
|
||||
|
||||
![]() Как я писал выше:
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#15
|
||||
|
||||
![]() использование в программе так же повышает скорость выполнения, нежели было в ожидании
|