Необходимость блокировки InputSyncer

mr_unicorn

Client
Регистрация
12.11.2016
Сообщения
51
Благодарностей
40
Баллы
18
Есть конструкция для блокировки ввода между потоками:
lock(SyncObjects.InputSyncer) {
здесь код
}

Вместе с тем не совсем понятно когда нужно блокировать этот объект а когда нет. Какие методы для взаимодействия сейчас есть:
HtmlElement.Click
HtmlElement.SetValue
HtmlElement.RiseEvent
Tab.KeyEvent
Tab.MouseClick
Tab.MouseWheel
Tab.MouseMove
Tab.FullEmulationMouse (семейство методов)
instance.SendText
...может быть не все методы перечислил, если напомните буду благодарен

Вопрос: для каких методов блокировка InputSyncer действительно нужна в многопотоке, а в каких случаях можно её не использовать?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 831
Благодарностей
3 556
Баллы
113
Это блокировка на ввод, но внутри её можно блокировать что угодно. И логика не в том, чтоб блокировать ей что-то всегда, а в том, чтобы при работе с данными, которые могут пересекаться в многопотоке, заблокировать один из потоков, пока выполняется другой.

Если вы выполняете шаблон в многопотоке, где просто что-то вводится из переменной - то нет смысла блокировать ввод.

Если же вы работаете с внешним источником данных, где нет отдельных данных для каждого потока (например, это может быть буфер обмена или файл, из которого нужно взять строку и удалить её оттуда) - то вот там нужно использовать такого рода блокировки, чтоб не было пересечений данных между потоками.
 

mr_unicorn

Client
Регистрация
12.11.2016
Сообщения
51
Благодарностей
40
Баллы
18
иначе говоря, даже если несколько инстансов выполняются в рамках одного процесса, пересечений по ресурсам при вызове метода instance.SendText (к примеру) не будет? и работа с виртуальной мышью или виртуальным вводом с клавиатуры не может мешать таковой в других инстансах?
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 831
Благодарностей
3 556
Баллы
113
иначе говоря, даже если несколько инстансов выполняются в рамках одного процесса, пересечений по ресурсам при вызове метода instance.SendText (к примеру) не будет? и работа с виртуальной мышью или виртуальным вводом с клавиатуры не может мешать таковой в других инстансах?
Тут дадут ответ только разработчики :-) Не известно (можно посмотреть, но не хочется разбираться в цепочках вызовов) как у них там внутри это реализовано. Но по логике - используя эти стандартные методы - уже должны быть предусмотрены блокировки внутри библиотек от ZennoPoster.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)