ACTL_SYNCHRO

Место, где разработчики плагинов могут поделиться своим опытом.
User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

ACTL_SYNCHRO

Post by NightRoman » Mon 22 Jun, 2009 10:56

zg 21.06.2009 18:08:33 +0200 - build 1005

1. новое апи. позволяет потоку, запущенному плагином выполнить код в контексте главного потока фара.
поток может вызвать Info.AdvControl(Info.ModuleNumber,ACTL_SYNCHRO,Param).
если плагин экспортирует функцию ProcessSynchroEventW то она будет вызвана в контексте главного потока.
первый параметр при этом будет равен SE_COMMONSYNCHRO (обязательно нужно проверять), второй - Param, переданный AdvControl.
ProcessSynchroEventW должна возвращать 0.
zg
Выглядит интересно. А можно use case scenario какой-нибудь привести в качестве примера? Какие возможности это дает плагину или какие известные проблемы решает?

User avatar
Andrey Budko
Posts: 1203
Joined: Fri 01 Apr, 2005 14:03
Contact:

Re: About ACTL_SYNCHRO

Post by Andrey Budko » Mon 22 Jun, 2009 11:10

NightRoman wrote:Выглядит интересно. А можно use case scenario какой-нибудь привести в качестве примера? Какие возможности это дает плагину или какие известные проблемы решает?
Смотри сорцы клипкопи "до" и "после". Было небезопасно и на авось, стало безопасно и красиво.

тут: http://code.google.com/p/evil-programme ... loads/list

User avatar
zg
zero-gravity
Posts: 5620
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 104 times
Contact:

Re: About ACTL_SYNCHRO

Post by zg » Mon 22 Jun, 2009 11:15

NightRoman wrote:Выглядит интересно. А можно use case scenario какой-нибудь привести в качестве примера? Какие возможности это дает плагину или какие известные проблемы решает?
1. в clipcopy уже есть пример использования.
2. возможность полноценно использовать диалоги для прогрессов. т.е. в потоке например копируем, переодически посылая actl_synchro. в обработчике processsynchroevent посылаем мессагу диалогу, диалог перерисовывает прогресс. в принципе вот этот пункт и был изначальным стимулом.
3. в панельных плагинах можно динамически обновлять содержимое панели. тот же процлист.
4. не задумывалось, но насколько я знаю, есть плагины, которые себя зовут через actl_postmacro. тут выходит более простой вариант.
5. редактор кто-то там хотел рефрешить :)
6. банальная возможность дёргать апи из потоков. понятно что не напрямую, но должно хватать :) если не хватит, никто не мешает в будущем добавить SE_SPECIALSYNCHRO.

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: About ACTL_SYNCHRO

Post by NightRoman » Mon 22 Jun, 2009 11:26

Andrey Budko, zg
Спасибо и за пример, и пояснения, наверное, этого достаточно. Да, заманчиво, надо будет из этого пользу извлечь безусловно.

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: About ACTL_SYNCHRO

Post by NightRoman » Mon 22 Jun, 2009 11:40

Впрочем, есть еще пара технических вопросов.
1) Насколько "мгновенно" этот перевызов в главном потоке произойдет?
2) А если ACTL_SYNCHRO из главного потока и вызывается, то перевызов будет сразу или таки текущий вызов плагина сначала будет закончен, управление вернется Фару и вот только тогда Фар вызовет callback плагина?

User avatar
CrOm
Posts: 1421
Joined: Tue 02 Aug, 2005 21:02
Location: Омск
Been thanked: 1 time
Contact:

Re: About ACTL_SYNCHRO

Post by CrOm » Mon 22 Jun, 2009 11:44

ваще спасибо за функционал у меня в куплее очень пригодится. правда в 1.75 нету такого
FARdroid, qPlayEx, Opera Cache Browser, Mr.Ripper

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: About ACTL_SYNCHRO

Post by NightRoman » Mon 22 Jun, 2009 12:21

NightRoman wrote:Впрочем, есть еще пара технических вопросов.
1) Насколько "мгновенно" этот перевызов в главном потоке произойдет?
2) А если ACTL_SYNCHRO из главного потока и вызывается, то перевызов будет сразу или таки текущий вызов плагина сначала будет закончен, управление вернется Фару и вот только тогда Фар вызовет callback плагина?
Попробую перефразировать. Можно ли считать, что ProcessSynchroEventW будет вызвана примерно тогда, когда Фар проигрывает клавиши или макросы из очереди, если таковые есть?

Попробую перефразировать еще так. Мой плагин вызван из меню, допустим. Он вызывает ACTL_SYNCHRO, потом запускает модальный диалог и все. Когда будет вызвана моя ProcessSynchroEventW - до запуска диалога, после или как повезет?

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: About ACTL_SYNCHRO

Post by NightRoman » Mon 22 Jun, 2009 17:12

И такой вопрос. Реализует ли это нововведение то, о чем просилось вот тут:
http://forum.farmanager.com/viewtopic.php?f=8&t=3890
.. другим способом, и побочно, конечно

(правда ответ опять наверное упирается в то, когда именно колбек вызывается)

Пока по моим экспериментам вроде - да. Но это может быть и случайно и слишком мало экспериментов, потому и "везет". Потому и жду официального ответа.

User avatar
zg
zero-gravity
Posts: 5620
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 104 times
Contact:

Re: About ACTL_SYNCHRO

Post by zg » Mon 22 Jun, 2009 19:34

проверка на вызов processsyncroevent проводится в GetInputRecord. т.е. гарантированного времени отклика нет, но всё достаточно быстро и должно хватать. если кому-то не хватит, пишите обоснование, буду думать.
дёрганье из основного потока. если плагин дёрнул и до выхода ничего интерактивного не вызывал, processsyncroevent вызовется после выхода. если скажем показал диалог, то в момент показа диалога.

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Re: About ACTL_SYNCHRO

Post by NightRoman » Tue 23 Jun, 2009 10:21

zg
В GetInputRecord - это кажется очень, очень хорошо. Не надо менять это *дефолтное* поведение, оно очень полезно (позволит избежать многих некрасивых хитростей с известной задачкой самоперевызова плагина). Если кому и понадобится более быстрый отклик (еще и не факт), это лучше будет другой операцией сделать. Вобщем, функционал очень полезный получается, причем пока я даже только про это:
4. не задумывалось, но насколько я знаю, есть плагины, которые себя зовут через actl_postmacro. тут выходит более простой вариант.

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

Re: About ACTL_SYNCHRO

Post by Shmuel » Sat 10 Apr, 2010 21:52

zg wrote: 2. возможность полноценно использовать диалоги для прогрессов. т.е. в потоке например копируем, переодически посылая actl_synchro. в обработчике processsynchroevent посылаем мессагу диалогу, диалог перерисовывает прогресс. в принципе вот этот пункт и был изначальным стимулом.
А как обработчик ProcessSynchroEvent узнаёт хэндл диалога, через глобальную переменную, устанавливаемую при получении DN_INITDIALOG, или есть более элегантный способ?

User avatar
t-rex
Страшный и ужасный
Posts: 4903
Joined: Tue 15 Mar, 2005 16:17
Location: Tel-Aviv
Has thanked: 1 time
Been thanked: 2 times
Contact:

Re: About ACTL_SYNCHRO

Post by t-rex » Sat 10 Apr, 2010 22:08

У ProcessSynchroEvent есть void *Param

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

Re: About ACTL_SYNCHRO

Post by Shmuel » Sat 10 Apr, 2010 22:13

Но этот Param передаётся из другого потока, откуда другой поток знает хэндл диалога?

User avatar
zg
zero-gravity
Posts: 5620
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 104 times
Contact:

Re: About ACTL_SYNCHRO

Post by zg » Sat 10 Apr, 2010 22:38

Shmuel wrote:Но этот Param передаётся из другого потока, откуда другой поток знает хэндл диалога?
в CreateThread void* param тоже есть.

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

Re: About ACTL_SYNCHRO

Post by Shmuel » Sat 10 Apr, 2010 22:48

Спасибо, теперь понятно.

montonero
Posts: 402
Joined: Wed 25 Jun, 2008 16:55
Has thanked: 2 times
Been thanked: 6 times

ACTL_SYNCHRO

Post by montonero » Wed 04 Oct, 2017 21:25

Извините за некропост, но раз уж тема про ACTL_SYNCHRO, то решил спросить здесь.

Что происходит, когда ACTL_SYNCHRO отправляется чаще, чем Far успевает вызывать ProcessSynchroEventW? Они куда-то накапливаются или просто отбрасываются?
"Far... Far never changes..."

Post Reply

Return to “Разработка плагинов”