Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Классы, Объекты, Потоки, Запутался, Помогите Добавлено: 12.05.11 04:03  

Автор вопроса:  akukinakis
Пару дней хожу с квадратной головой, думая над решением своей задачи и над тем как лаконично сформулировать свой вопрос для форума :)

Короче, нужен совет решения след.задачи:
ЧТО УЖЕ ИМЕЕТСЯ: Имеется моя программа, выполняющая манипуляцию мышью с окном другого приложения на экране (клики ЛКМ, либо ПКМ с последующим выбором пункта конт.меню). При работе с одним приложением все работает отлично.

Сейчас потребовался одновременный запуск двух и более приложений, и соответственно, стольких же копий моей программы.

Я вынес основной блок кода в класс, соответственно, создаю объекты и запускаю каждый в своем потоке. Таким образом организована одновременная работа нескольких "копий" программы.

ПРОБЛЕМА: Перед кликом, каждая "копия" программы делаем окно обрабатываемого приложения активным (выносит на первый план), чтобы щелчки мыши не пришлись на другое окно и начинает выполнять манипуляции, требующие, до нескольких секунд, времени. После этого пауза на неопределенное время, после чего все повторяется.

В случае, если одновременно нескольким копиям понадобилось получить управление, и место клика, перекрывается другим окном, происходит сбой: пара кликов нет да и придется на другое окно, только что ставшее активным (если оно перекрывало место клика на первом окне).

ВАРИАНТ РЕШЕНИЯ: Я думаю решить это след.образом: Каждая копия, перед выполнением своих действий должна перехватить управление, т.е. приостановить работу остальных копий (потоков) методами thread.suspend() или thread.Sleep(3000).

Долго пытаюсь заставить все это работать, но пока не получается...

ВОПРОС:
Как из одного потока приостановить работу другого на пару секунд? Или может есть другие идеи..

ДА и, избежать перекрытия окон не получится..

'Чесно, максимально коротко пытался написать. Спасибо

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 12.05.11 12:28
для этого нужно использовать механизмы синхронизации. Простейшее что может подойти - Monitor (через него также работает конструкция lock/SyncLock)

Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 12.05.11 23:47
Простейшее что может подойти - Monitor (через него также работает конструкция lock/SyncLock)

Я бы дополнил.. у него разные копии приложения, а lock(Monitor),если не ошибаюсь, работает в рамках одной копии, точнее одного процесса. Поэтому,имхо, ему более подойдет Mutex
Как из одного потока приостановить работу другого на пару секунд?

Ты должен различать понятия потоки и процессы. Если у тебя потоки запущены в рамках одного процесса(1 копии приложения) то подойдет Monitor, если разные процессы то Mutex

А вообще достаточно сумбурно сформулировано(хоть и видно что старался).. Лично я так и не понял. Говоря о нескольких копиях ты что имел ввиду: Несколько копий твоего приложения или несколько копий контроллируемого приложения? (к примеру 3 копии MS WORD открыто и ты там что то кликаешь)

Ответить

Номер ответа: 3
Автор ответа:
 akukinakis



Вопросов: 2
Ответов: 8
 Профиль | | #3 Добавлено: 13.05.11 06:45
Artyom пишет:
Простейшее что может подойти - Monitor

EROS пишет:
Если у тебя потоки запущены в рамках одного процесса(1 копии приложения) то подойдет Monitor, если разные процессы то Mutex

Нашел информацию о Mutex, буду разбираться на выходных. Вроде то, что нужно. Почитаю еще о Monitor.
Большое человеческое спасибо!

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам