Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2011, 19:34   #1
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
Печаль выполнение процедур одновременно

моя прога должна отправлять нажатия клавиши сразу в два окна.
есть процедура которая передает нажатия клавиш полученному названию окна.
нажатия должны передаваться с некоторым интервалом. Чтобы прога не зависала использую не слип, а
Код:
procedure Delay(dwMilliseconds: Longint);
 var
   iStart, iStop: DWORD;
 begin
   iStart := GetTickCount;
   repeat
     iStop := GetTickCount;
     Application.ProcessMessages;
   until (iStop - iStart) >= DWORD(dwMilliseconds);
end;
я вызываю процедуру передачи нажатия клавиш (например 'A') и через 5 сек вызываю ее еще раз, но на другое окно (т.е. с другими входными параметрами). первое выполнение процедуры останавливается, а второе начинает выполняться. Когда вторая отослала нажатия (например 10 раз) она завершается и только потом работая первой возобновляется.
Код:
procedure ahaha(handl:string);
var handle:thandle;
begin
   
   Handle:=FindWindow(nil, PChar(handl));
PostMessage(Handle,WM_CHAR,ord('A'),0);
    delay(100);
  ahaha(handl);
end;


procedure TForm1.Button1Click(Sender: TObject);
var Handle:Thandle;
begin
ahaha('окно1');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 ahaha('окно2');
end;
Т.е. нажал на кнопку с одним названием окна - все шлется
нажал с другим названием - в первое не шлется, пока это не завершится.
Так вот у меня вопрос...
Почему выполнение первой останавливается, пока не выполнится вторая? Походу, дело в процедуре Delay. Если да -какую альтернативу использовать?
Pamparam вне форума Ответить с цитированием
Старый 25.09.2011, 19:48   #2
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

используй потоки для одновременного выполнения своей процедуры
fate вне форума Ответить с цитированием
Старый 25.09.2011, 20:06   #3
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
используй потоки
вот мне очень интересно, как ?
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 25.09.2011, 20:07   #4
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

если даже процедуры разные - происходит то же самое
проблема в том, что одновременно не могут выполняться 2 процедуры?
Pamparam вне форума Ответить с цитированием
Старый 25.09.2011, 20:08   #5
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
проблема в том, что одновременно не могут выполняться 2 процедуры?
могут и не только 2.
+ господин fate раскажет нам сейчас, мне самом интересно, хотел задать аналогичный вопрос но не стал увидев Вашу тему.
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 25.09.2011, 20:08   #6
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
одновременно не могут выполняться 2 процедуры?
Могут если в системе не менее 2-х процессоров.
mss вне форума Ответить с цитированием
Старый 25.09.2011, 20:09   #7
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Цитата:
используй потоки для одновременного выполнения своей процедуры
Цитата:
могут и не только 2.
зачем тогда потоки?
Pamparam вне форума Ответить с цитированием
Старый 25.09.2011, 20:11   #8
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Цитата:
Могут если в системе не менее 2-х процессоров.
mss, поясните что Вы имели ввиду. То есть если у меня одноядерный процессор, то я не могу создать многопоточное приложение на своём компе, например стартануть Апач сервер, или организовать фоновый процесс паралельной прослушки ИП порта?
Прошу пояснения для моего общего развития. Заранее благодарю
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 25.09.2011, 20:15   #9
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
поясните что Вы имели ввиду
фактически если один процессор то в 1 еденицу времени может выполняться только одна задача, но процессор обрабатывает задачи очень быстро поэтому и складывается впечатление многозадачности.

Вам пример работы с потоками? могу набросать счас.
fate вне форума Ответить с цитированием
Старый 25.09.2011, 20:20   #10
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

В однопроцессорной мультизадачной системе кодовые потоки могут выполняться лишь "псевдо"одновременно - система вынуждена распределять кванты времени единственного существующего процессора мнжду разными кодовыми потоками разных процессов.

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2 действия одновременно Mr_skiner Общие вопросы Delphi 10 14.05.2011 09:40
одновременное выполнение разных процедур в одном файле? gramp Microsoft Office Excel 15 25.03.2011 12:15
последовательное выполнение процедур в макросе iamaxl Microsoft Office Excel 4 07.07.2009 16:23
Псевдопараллельное выполнение процедур (Потоки) delphin100 Общие вопросы Delphi 4 10.04.2009 20:16