Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.17;
Скачать: CL | DM;

Вниз

Треды   Найти похожие ветки 

 
Evger   (2009-11-26 14:04) [0]

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

Выглядит это примерно так.
Создается новый тред:
Threads[i] := TMyThread.Create(true);
Threads[i].Mouse := MouseThread; // так передается тред мышы

в TMyThread добавление задчи
MouseThread.AddAction(Task)

в MouseThread

procedure TMouseThread.AddAction(Task)
begin
SetLength(Order, Length(Order) + 1);
Order[Length(Order) — 1] := Task;
end

procedure TMouseThread.AddAction(Task)
begin
while (true) do begin
DoTask(Order[CurrentTask]);
inc(CurrentTask)
end
end

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


 
clickmaker ©   (2009-11-26 14:08) [1]

> Стоит ли тут использовать синхронизацию потоков

стоит


 
Демо ©   (2009-11-26 14:23) [2]

Не просто стоит, а абсолютно необходимо.
Причём думать о синхронизации нужно на уровне проектирования, потому что реализация синхронизации - достаточно весомый кусок приложения.


 
Evger   (2009-11-26 15:07) [3]

Демо
Что Вы называете на уровне проектирвания?

Как раз чтобы избежать одновременной работы с мышкой введен отдельный тред.

Добавление в него задачи происходит очень быстро - фактически добавляется элемент в массив.
Вопрос как избежать одновременное обращение нескольких тредов к функции AddAction.

Вот и хочу узнать, как это лучше сделать, как бы Вы стали это делать.


 
Сергей М. ©   (2009-11-26 15:25) [4]


> как избежать одновременное обращение нескольких тредов к
> функции AddAction


Защищать от одновременного обращения следует не вызов AddAction, а тот ресурс, который действительно потоконебезопасен.

В твоем случае это дин.массив Order, обращения к нему как раз и следует защищать крит.секцией.


 
Leonid Troyanovsky ©   (2009-11-27 09:16) [5]


> Evger   (26.11.09 14:04)  

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

Есть гениальное изобретение человечества - сковородка с уже
приделанной ручкой.
Читай про SetWindowsHookEx.

Но, предупрежу сразу, что читать придется много и внимательно.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2010.01.17;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.012 c
15-1257940976
xayam
2009-11-11 15:02
2010.01.17
Перевод NNTP-протокола


15-1258022912
Kolan
2009-11-12 13:48
2010.01.17
Автозапуск программы


1-1233135151
nes
2009-01-28 12:32
2010.01.17
TPopupMenu - подменю с левой стороны


15-1257975014
Юрий
2009-11-12 00:30
2010.01.17
С днем рождения ! 12 ноября 2009 четверг


15-1258634939
И. Павел
2009-11-19 15:48
2010.01.17
Брак или клавиатура с ИИ?