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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2009, 19:46   #11
postal2
Форумчанин
 
Аватар для postal2
 
Регистрация: 31.10.2008
Сообщений: 215
По умолчанию

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

обычно мне кажется что никак...(может ошибаюсь...то нить отпишется кроме меня?)

ну я предложил сделать задежку на основе таймера (виндоувзкого...который работает на основе сообщений) там должно быть норм поидее
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.08.2009, 19:55   #13
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

А кто вам сказал что локальные переменные процедуры создаются в одном месте памяти?
попробуйте такую проверку (или возьмите проект из вложения)
Код:
procedure TForm1.delay(timeMS:cardinal; mess: string);
var i:cardinal;
begin
i:=GetTickCount;
Memo1.Lines.Add('"'+mess+'" START - '+ TimeToStr(now)+' I='+ IntToStr(I)+' timeMS='+ IntToStr(timeMS));
while ((GetTickCount-i)<timems) do
begin
sleep(100); application.ProcessMessages;
end;
Memo1.Lines.Add('"'+mess+'" stop - '+ TimeToStr(now)+' I='+ IntToStr(I)+' Delta='+ IntToStr(GetTickCount-i));
end;

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

procedure TForm1.Button2Click(Sender: TObject);
begin
delay(3000,'Button2Click'); // showmessage('1');

end;
А вот натикало как по первому так и по второму нажатию больше заданного. Так что искать стоит в особенностях
Код:
sleep(100); application.ProcessMessages;
Memo:
Цитата:
Memo1
"Button1Click" START - 20:11:55 I=33947609 timeMS=3000
"Button2Click" START - 20:11:56 I=33948703 timeMS=3000
"Button2Click" stop - 20:12:00 I=33948703 Delta=3062
"Button1Click" stop - 20:12:00 I=33947609 Delta=4156
А когда написал так:
Код:
procedure TForm1.delay(timeMS:cardinal; mess: string);
var i:cardinal;
begin
i:=GetTickCount;
Memo1.Lines.Add('"'+mess+'" START - '+ TimeToStr(now)+' I='+ IntToStr(I)+' timeMS='+ IntToStr(timeMS));
while ((GetTickCount-i)<timems) do
begin
sleep(100);application.ProcessMessages; //
Memo1.Lines.Add('"'+mess+'" now - '+ TimeToStr(now)+' GetTickCount='+ IntToStr(GetTickCount));
end;
Memo1.Lines.Add('"'+mess+'" stop - '+ TimeToStr(now)+' I='+ IntToStr(I)+' Delta='+ IntToStr(GetTickCount-i));
end;
то получилось:
Цитата:
Memo1
"Button1Click" START - 20:16:08 I=34200640 timeMS=3000
"Button1Click" now - 20:16:09 GetTickCount=34200750
"Button1Click" now - 20:16:09 GetTickCount=34200859
"Button1Click" now - 20:16:09 GetTickCount=34200968
"Button1Click" now - 20:16:09 GetTickCount=34201078
"Button1Click" now - 20:16:09 GetTickCount=34201187
"Button1Click" now - 20:16:09 GetTickCount=34201296
"Button1Click" now - 20:16:09 GetTickCount=34201406
" Button2Click" START - 20:16:09 I=34201515 timeMS=3000
" Button2Click" now - 20:16:09 GetTickCount=34201625
" Button2Click" now - 20:16:10 GetTickCount=34201734
" Button2Click" now - 20:16:10 GetTickCount=34201843
" Button2Click" now - 20:16:10 GetTickCount=34201953
" Button2Click" now - 20:16:10 GetTickCount=34202062
" Button2Click" now - 20:16:10 GetTickCount=34202171
" Button2Click" now - 20:16:10 GetTickCount=34202281
" Button2Click" now - 20:16:10 GetTickCount=34202390
" Button2Click" now - 20:16:10 GetTickCount=34202500
" Button2Click" now - 20:16:10 GetTickCount=34202609
" Button2Click" now - 20:16:11 GetTickCount=34202718
" Button2Click" now - 20:16:11 GetTickCount=34202828
" Button2Click" now - 20:16:11 GetTickCount=34202937
" Button2Click" now - 20:16:11 GetTickCount=34203046
" Button2Click" now - 20:16:11 GetTickCount=34203156
" Button2Click" now - 20:16:11 GetTickCount=34203265
" Button2Click" now - 20:16:11 GetTickCount=34203375
" Button2Click" now - 20:16:11 GetTickCount=34203484
" Button2Click" now - 20:16:11 GetTickCount=34203593
" Button2Click" now - 20:16:11 GetTickCount=34203703
" Button2Click" now - 20:16:12 GetTickCount=34203812
" Button2Click" now - 20:16:12 GetTickCount=34203921
" Button2Click" now - 20:16:12 GetTickCount=34204031
" Button2Click" now - 20:16:12 GetTickCount=34204140
" Button2Click" now - 20:16:12 GetTickCount=34204250
" Button2Click" now - 20:16:12 GetTickCount=34204359
" Button2Click" now - 20:16:12 GetTickCount=34204468
" Button2Click" now - 20:16:12 GetTickCount=34204578
" Button2Click" stop - 20:16:12 I=34201515 Delta=3063
"Button1Click" now - 20:16:12 GetTickCount=34204578
"Button1Click" stop - 20:16:12 I=34200640 Delta=3938
Вложения
Тип файла: zip test.zip (1.9 Кб, 6 просмотров)

Последний раз редактировалось s.Creator; 20.08.2009 в 20:18.
s.Creator вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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