घर
Top.Mail.Ru Yandeks.Metrika
फोरम: "विनएपीआई";
वर्तमान संग्रह: 2003.06.02;
डाउनलोड करें: [xml.tar.bz2];

नीचे

क्यों काम नहीं करता है (विभिन्न तरीकों से काम करता है) नींद इसी तरह की शाखाएँ खोजें


Psibug   (2003-04-01 10:07) [0]

На одних компах моя прога работает быстрее,
а на других - медленнее. Эта процедура делает (пытается делать) цикл программы стабильным в смысле скорости при помощи вызова Sleep.
यहाँ कोड है:

procedure startprogram2(const SleepInterval:cardinal);
var msg:TagMSG;
//bcontinue:boolean;
begin
if bisprogramstarted then exit;
ZeroMemory(@msg,sizeof(msg));
peekmessage(msg,hwnd,0,0,PM_REMOVE);
bPrimaryLoopContinue:=true;
try
bisprogramstarted:=true;
while bPrimaryLoopContinue{msg.message <> WM_QUIT} do
if PeekMessage(msg,hwnd,0,0,PM_REMOVE) then
begin
if msg.message= WM_QUIT then break;
//TranslateMessage(Msg);
DispatchMessage(msg);
biswndactive:=(GetActiveWindow()=hwnd);
end
else
begin
if GetAsyncKeyState(VK_F10)<0 then
break
else
begin
if Assigned(PIterate) then PIterate(bPrimaryLoopContinue);
//Вот вызов Sleep
if bPrimaryLoopContinue then Sleep(SleepInterval){continue} else break;
end;
end;
finally
freesysres;
bisprogramstarted:=false;
// ExitProcess(0); {PostQuitMessage(0);}
end;
end;
.
Срочно помогите, Мастера! А то Unreal Flat Project глючить будет и по этому поводу.



Cobalt   (2003-04-01 13:24) [1]

Поясни, зачем ты делаешь Sleep?
Только подробно, с обоснованием.
З.Ы. приоритет процесса не изменял?
З.З.Ы Внедряешься в чужое АП?



MrAngel   (2003-04-01 15:35) [2]

Видишь ли какая ерунда - комманда sleep указывает микропроцессору какое время он может необрабатывать процесс (или поток)откуда sleep вызван.
По моему на уровне системы не правильно пределяется это время - вывод используй другое.

А вообще я не пойму какая разница на сколько бысрее выполняется твоя программа.

Слушай вот ещё. Может быть что проблема вовсе не в Sleep. а в других строках которые замедляют сам процесс выполнения в зависимости от мощности компьютера.



Psibug   (2003-04-01 15:39) [3]

> कोबाल्ट
Зачем я делаю Sleep, чтобы на всех компах были одинаковые FPS, чтобы скорость анимации чуваков зависела только в настройках модели, а не от скорости CPU. Ато будет летать программа как "спектрумный" Saboteur - нажмёшь вправо, а чувак пролетел 999 км и упал в пропость. В чужую прогу не влазию (даже в свою:). Приоритет по умолчанию.



i-C3H7OH   (2003-04-01 18:43) [4]


> Psibug © (01.04.03 15:39)


сделай лучше так
введи независимое время и чтоб положения обьектов при генерации кадра вычислялись на основании именно этого времени. тогда скорость игры не будет зависеть от FPS, скромный пенек будет выжимать 20 фпс, а к-н П4 -скажем 300 фпс и все будет ок



Psibug   (2003-04-01 18:58) [5]

Нужно, чтобы цикл программы работал именно 50 раз в секунду.
Я явно это указывю (SleepInterval=24, это типа константа такая).
Каждый раз в момент срабатывания цикла будет генерироваться траффик. А в игре типа Unreal 2D такой трафик должен всеми генериться в одинаковом количестве с _одинаковой скоростью_.
Как это самое независимое время сделать?



Intell   (2003-04-01 19:33) [6]

Т.е. не зависимо от системы?



Shaman_Naydak   (2003-04-01 19:57) [7]

Самое примитивное..
От таймера.. ставь, чтобы таймер срабатывал, скажем, через 20 мсек.. ну и в нем выполняй свой Iterate..



Psibug   (2003-04-01 21:46) [8]

>Shaman_*
<CAUTION! NO VCL ALLOWED!>
> अंतर्मुखी
Да. Иначе на одной системе будет текущий номер итерации 243435, а на другой 243112 и дыижок на разных компах будет находиться в разных состояниях.



Psibug   (2003-04-02 13:42) [9]

Так что - ниужели никто не знает?



i-C3H7OH   (2003-04-02 14:16) [10]


> Psibug © (01.04.03 21:46)



<CAUTION! NO VCL ALLOWED!>

используй АПИ-таймер (SetTimer, KillTimer) или мультемедийный из MMSystem.pas



Psibug   (2003-04-03 10:05) [11]

Спасибо. На моём компе уже работает. Скоро на чужом проверю.



Psibug   (2003-04-04 09:55) [12]

Не подходит таймер. Рывками всё.



Intell   (2003-04-04 10:09) [13]

Есть компонент с изменяющимся приоритетом. Если нужен сообщи:
sergein@nojabrsk.ru
У меня тоже были рывки, поставил его и всё стало прекрастно работать.



i-C3H7OH   (2003-04-04 14:28) [14]

>Psibug © (04.04.03 09:55)

ты графику по таймеру выводишь? ты не прав.
модель, твоей игры пусть идет по таймеру, а графика пусть обрабатывается в отдельном потоке



nikus   (2003-04-05 05:14) [15]

Всё вы мудрите что-то и изобретаете велосипед.
И потоки дополнительные городить да ещё им приоритеты высокие присваивать - весьма не эффективно и совсем не нужно для такой задачи.
Обычная практика такая: есть переменная - счётчик времени, есть цикл, в котором отрисовывается графика в зависимости от этого счётчика. Сразу же после отрисовки сцены процесс повторяется без всяких задержек. То есть:

StartTime := GetTickCount;
LastTime := 0;
while not finished do begin
ProcessKeys; {процедурка обработки нажатия клавиш}
LastTime := GetTickCount - StartTime;
StartTime := GetTickCount;
{в переменной LastTime имеем число мс, прошедших при отрисовке предыдущего кадра}
Draw; {рисуем что хотели с учётом LastTime. Все XYZ передвижения объекта должны быть пропорциональны прошедешему времени, => если объект должен нарастить координату X втечении секунды на 50, то ты должен смещать объект каждый кадр на(LastTime/1000)*50 и всё!}
end;



Psibug   (2003-04-05 16:11) [16]

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



पन्ने: 1 पूरी शाखा

फोरम: "विनएपीआई";
वर्तमान संग्रह: 2003.06.02;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.6 एमबी
समय: 0.068 c
7-3189
Yuri20032
2003-03-21 19:17
2003.06.02
Win98 में फ़ोल्डर्स पर पासवर्ड कैसे डालें ???


14-3172
नरम
2003-05-15 12:35
2003.06.02
माइक्रोसॉफ्ट और लिनक्स


6-3036
सर्गेई वी।
2003-04-01 16:36
2003.06.02
डेल्फी पर मेल सर्वर


3-2816
Solovyov
2003-05-15 10:28
2003.06.02
क्या जाल?


7-3191
सर्गेई
2003-04-01 09:46
2003.06.02
डिवाइस को अक्षम / सक्षम कैसे करें?





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский