| ||||
| ||||
|
Важные объявления |
|
13.05.2006, 20:21 | #21 (permalink) |
Старожил
Регистрация: 14.03.2005
Адрес: Moscow
Сообщений: 1,078
|
to Sphinx:
Ну мне это как бы не надо Проги для себя пишу так как быстрее и удобнее, то есть дельфи. Ну я по работе, пишу на php и использую SQL больше мне как бы ничего и не надо to Grey: Во во, програмка то была совсем маленькая. А с Win API... я ее не знаю Ушел в веб-программирование |
0 |
13.05.2006, 20:52 TS | #22 (permalink) |
Бессмертный
Регистрация: 30.04.2004
Сообщений: 3,612
|
Вернемся к теме. Все же меня этот гондурас беспокоит. Кому не лень -- протестируйте эти две проги (упрощенный вариант первоначальной проблемы). Различаются только наличием/отсутствием кнопки типа TSpeedButton, которая никакой роли не играет. При нажатии кнопки "button" включается таймер на 1 секунду, и генерируются случайные числа от 0 до 51. По отработке таймера выводится количество сгенерированных чисел. У меня стабильная разница в 5%:
У кого есть Дельфи, могут сами состряпать. Вот исходник: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons; type TForm1 = class(TForm) Timer1: TTimer; BitBtn1: TBitBtn; Edit1: TEdit; SpeedButton1: TSpeedButton; procedure Timer1Timer(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; stop: boolean; implementation {$R *.dfm} procedure TForm1.Timer1Timer(Sender: TObject); begin timer1.Enabled := false; bitbtn1.Enabled := true; stop := true; end; procedure TForm1.BitBtn1Click(Sender: TObject); var i: integer; w: word; begin bitbtn1.Enabled := false; stop := false; i := 0; edit1.Text := '...'; timer1.Interval := 1000; timer1.Enabled := true; repeat application.ProcessMessages; inc( i ); w := random( 52 ); until stop; edit1.Text := inttostr( i ); end; end.
__________________
Arthur Grey |
0 |
13.05.2006, 21:19 | #23 (permalink) |
Участник
Регистрация: 30.06.2005
Адрес: Калуга
Сообщений: 190
|
Я попробую угадать, что дело в
ProcessMessages эта фигня останавливает выполнение твоей проги и ждет очистки очереди сообщений, а она(очередь) с разными компанентами может иметь разную длинну. Вот и все. Сделай все это в отдельном потоке и не будет таких проблем. |
0 |
13.05.2006, 21:40 TS | #24 (permalink) | |
Бессмертный
Регистрация: 30.04.2004
Сообщений: 3,612
|
Цитата:
__________________
Arthur Grey |
|
0 |
13.05.2006, 21:44 | #26 (permalink) | ||
Участник
Регистрация: 30.06.2005
Адрес: Калуга
Сообщений: 190
|
Цитата:
А какой код был без ProcessMessages очень интересно. или как ты проверил написав - "Не влюёт совершенно." |
||
0 |
13.05.2006, 21:49 TS | #27 (permalink) | |
Бессмертный
Регистрация: 30.04.2004
Сообщений: 3,612
|
Цитата:
__________________
Arthur Grey |
|
0 |
13.05.2006, 21:51 TS | #28 (permalink) | |
Бессмертный
Регистрация: 30.04.2004
Сообщений: 3,612
|
Цитата:
__________________
Arthur Grey |
|
0 |
13.05.2006, 21:51 | #29 (permalink) |
Ветеран
Регистрация: 26.11.2005
Адрес: Минск
Сообщений: 1,242
|
Во-во.. mikx скорее всего прав.
лучше сделай так: var Tick1, Tick2: DWord; ... Tick1 := GetTickCount; // code here.. Tick2 := GetTickCount; if Abs(Tick2-Tick1) <> 300 then Application.ProcessMessages; Tick1 := Tick2; ... 300 -- время в миллисекундах (ставь то какое нужно). Так ОС не будет думать, что твоя прога зависла.. а еще лучше на 250-300 делай HandleMessage а на 400-500 ProcessMessage..
__________________
Единственный способ стать умнее -- играть с более умным противником. // Основы шахмат\'1883 |
0 |
13.05.2006, 21:55 | #30 (permalink) | ||
Участник
Регистрация: 30.06.2005
Адрес: Калуга
Сообщений: 190
|
Цитата:
погляди что будет. Вообще если код оторван от интерфейса то скорость его выполнения не может зависить от компанентов. |
||
0 |
13.05.2006, 22:11 TS | #31 (permalink) | |
Бессмертный
Регистрация: 30.04.2004
Сообщений: 3,612
|
Цитата:
Маст дай, однозначно.
__________________
Arthur Grey |
|
0 |
13.05.2006, 22:16 | #33 (permalink) |
Ветеран
Регистрация: 26.11.2005
Адрес: Минск
Сообщений: 1,242
|
В любом случае прислушайся к моему совету... Вызывать листенеры после каждого сложение или умножения -- глухой путь.. имхо.
__________________
Единственный способ стать умнее -- играть с более умным противником. // Основы шахмат\'1883 |
0 |
13.05.2006, 22:27 TS | #34 (permalink) |
Бессмертный
Регистрация: 30.04.2004
Сообщений: 3,612
|
Кстати, в основной задаче (в отличие от этих демок) даже после перезагрузки все осталось по-прежнему. Тормозит на 25%. Попробую с тредами, но не раньше понедельника :*), потом отпишу, что получится.
__________________
Arthur Grey |
0 |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DIR 615 непонятные обрывы | screamwithme | Железо | 7 | 26.04.2010 00:36 |
Три непонятные мне раздачи. | L!sichka | Одностоловые турниры | 2 | 05.11.2009 07:25 |
Непонятные мне лимпы %-\\ | Karn | Многостоловые турниры | 3 | 19.05.2009 01:30 |
Непонятные статы | GreyNW | Покер софт | 11 | 15.03.2009 23:06 |
Непонятные мне ситуации. | HollanderSk8er | Одностоловые турниры | 18 | 07.02.2009 02:51 |
|
|