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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2009, 16:15   #1
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
Сообщение Нестыковка времени выполнения процедур \ функций

За годы программирования на дельфи возник такой вопрос - почему если вызваит функцию сначала из одного места программы, а пока она работает из другого, то результат функции выйдет по второму запуску и в это же время и выйдет результат функции для первой, но равный второму?? Ладно, коряво объяснил, смотрите пример.

Имеется процедура delay, она делает паузу в программе без зависания(не как sleep) и две кнопки, на которых стоит задержка данной функцией и показ сообщения. Так вот, если нажать первую кнопку и, пока не завершилась функция, вторую, то сначала произойдёт событие второй кнопки и тут же первой (причём всё по времени задержки второй кнопки). Выкладываю код ниже

Код:
procedure tform1.delay(timeMS:cardinal);
var i:cardinal;
begin
i:=GetTickCount;
while ((GetTickCount-i)<timems) do
begin
sleep(100); application.ProcessMessages;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
delay(2000); showmessage('1');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
delay(2000); showmessage('2');
end;
Может есть какой-то способ побороть это? так, чтобы одна процедура при вызове из разных частей программы обращалась в разные ячейки памяти (ну вы поняли о чём я, обе процедуры и чтобы пахали отдельно). Не делать же по задержке на каждую функцию?! Заранее спасибо.
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 20.08.2009, 16:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в программе без зависания
Ессно, тыж применил application.ProcessMessages;

Что-то монстроподобное...
А что ты собсно хочешь сделать то?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.08.2009, 17:43   #3
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

Чтобы процедура задержки выполнялась из разных частей программы и не зависела от того, выполняется в данный момент она из другой части программы или нет
Может следует добавить override или что-то в этом роде?
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 20.08.2009, 18:06   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

override
а вы смысла директивы этой незнаете чтоли?

по коду...так вроде так все и должно быть.
ибо задержки вполяются параллельно

попробуйте проверить с разными задержками
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2009, 18:13   #5
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

В том то и дело, что нет. Нажмите на кнопку 1 и, пока время ещё тикает, на кнопку 2. Сначала покажется сообщение 2, а только потом 1..

application.ProcessMessages тут вообще ни при чём. Наверно..

Скажем так, продолжение темы
[Ferox]

Последний раз редактировалось postal2; 20.08.2009 в 18:21.
postal2 вне форума Ответить с цитированием
Старый 20.08.2009, 18:34   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну мне пришла в голову одна идея....но это уже извращенный изврат..

написать свой диспетчер функций...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2009, 18:39   #7
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

Мда.. А из стандартненького ничего нет?!
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 20.08.2009, 18:55   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

хм...еще одна идея пришла...делать задержку на основе WMTimer
тогда должно быть все норм.

кстати протестировал...по логике программы все верно...а знаете почему?
Код:
((GetTickCount-i)<timems)
тики то тикают
+в какой процедуре находится управление при нажатии первой а потом второй кнопки?
во второй процедуре...именно поэтому сначало будет второе сообщение а не первое
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2009, 19:02   #9
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

Честно говоря не понял..
[Ferox]
postal2 вне форума Ответить с цитированием
Старый 20.08.2009, 19:17   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

что именно?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последовательность выполнения процедур lemeshev Общие вопросы Delphi 4 15.05.2009 20:33
использование процедур и функций! ...Оленька... Паскаль, Turbo Pascal, PascalABC.NET 0 24.12.2008 15:33
Глобальность функций и процедур rivers Общие вопросы Delphi 5 01.08.2008 20:35
Параметры процедур и функций shurik_7866 Общие вопросы Delphi 8 10.12.2007 19:49