3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
1

Тормозит поток, обрабатывая игровую физику

30.09.2014, 12:00. Показов 3289. Ответов 46
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем, такая проблема:
Пишу простенькую игру. Для обработки физики создал отдельный поток. Графика рисуется на форме Канвами в непрерывном цикле. пока запускаю в дельфи все прекрасно работает. но стоит только открыть игру как самостоятельное приложение физ. поток начинает выполняться оч. медленно. И получается слоу мо). Не взирая на приоритет потока. Смена приоритета не чего не изменила. Хотя иногда (очень редкий случай) запускается нормально и не глючит. Помогите пожалуйста решить проблему, ато я голову сломал в чем проблема!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2014, 12:00
Ответы с готовыми решениями:

Дополнительный поток тормозит главный
Всем здравствуйте. Вот код, использующий работу нескольких потоков: Public Class Form1 '...

Нажатие кнопки тормозит фоновый поток
Здравствуйте! Есть приложение Windows Form на C# (visual studio 2010) с одной кнопкой (функция...

считать только последнюю строку из файла не обрабатывая другие
Можно как-то считать только последнюю строку из файла не обрабатывая другие...то-есть просто как-то...

Обращение к переменной одной формы, обрабатывая событие на другой форме...
Я сделал в гриде столбец селект. При нажатии на кнопку, я сохраняю индекс выбранного ряда в...

46
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
08.12.2014, 20:46 21
Author24 — интернет-сервис помощи студентам
Нас не запугать))
Давай посмотрим.
0
3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
08.12.2014, 20:58  [ТС] 22
ну собсна вот
Вложения
Тип файла: rar VTG.rar (267.7 Кб, 10 просмотров)
0
3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
08.12.2014, 22:25  [ТС] 23
Ну как, страшно?

Добавлено через 9 минут
я тут подумал лучше возьмите все в полном сборе
Вложения
Тип файла: rar VTG.rar (6.97 Мб, 4 просмотров)
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
08.12.2014, 22:33 24
Забавная игрушенция
И оформлена оригинально

По теме могу сказать, что никаких тормозов обнаружить не удалось - все работает четко в любом режиме.
Единственное, что у меня звук не работает и при возврате из игры в ее меню модуль UdxSoundManager выдает исключение, поэтому убрал все, что с ним связано. Кстати, этот модуль вполне может давать тормоза.

Прилагаю ЕХЕшник (попробуй его у себя запустить) и проект без UdxSoundManager - скомпили его у себя и посмотри останутся ли тормоза.
Вложения
Тип файла: rar VoleyTron11.rar (656.6 Кб, 9 просмотров)
Тип файла: rar VTG.rar (73.9 Кб, 5 просмотров)
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
08.12.2014, 22:39 25
Блин, звука не было, т.к. файлов звуковых нет, но все равно проверь вариант без UdxSoundManager.

Твой ЕХЕ у меня отлично работает без тормозов и со звуком.

Еще тормоза антивирус может давать. Если есть, попробуй отключить.
0
3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
08.12.2014, 23:17  [ТС] 26
Антивирусами в принципе не пользуюсь. Спасибо за отзыв)) Модуль UdxSoundManager бестыже стырил из книги Есенина DirectX в Delphi. Да и там тоже рылся он просто упрощает пользование директсоундом, и тормоза давать там вроде нечему. Код у потоков не смотрел? мож там че накосячил? Посмотрел твой exe-шник, а зачем дрожание убрал? это как бы фишка была)

Добавлено через 7 минут
Посмотрел твой exe-шник работает по шустрее но это только потому что у меня проц 1.5 Ггц. а вместе с UdxSoundManager отрезалось болшое количество плюшек)

Добавлено через 7 минут
Проверил когда игра работает в нормальном режиме используется 45 процентов ЦП, когда слоумо 6 процентов. Magic!
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
08.12.2014, 23:41 27
Цитата Сообщение от Infernalboy Посмотреть сообщение
Код у потоков не смотрел?
Чтобы в нем разобраться надо больше времени.

Не очень понял как в процедуре DrawMEgaMeassage константам присваиваются другие значения и почему компилятор это пропускает:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Procedure DrawMEgaMeassage(S:String;var Buf:tbitmap);
Const Size:integer = 0;
Life:integer=0;
LM:String='';
Speed:real=0.1;
Normsize=18;
...
 
begin
  if LM<>S then
   begin
       Size:=maxS;  // <---
       life:=maxl;  // <---
       LM:=s;       // <---
   end;
...
Добавлено через 10 минут
Цитата Сообщение от FIL Посмотреть сообщение
Не очень понял
Нашел нужную галку.
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
08.12.2014, 23:50 28
Еще один вариант:
Судя по всему, в конфигурации Release ты проект не компилил.
Попробуй запустить это:
Вложения
Тип файла: rar VoleyTron11.rar (661.3 Кб, 1 просмотров)
0
3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
09.12.2014, 00:46  [ТС] 29
нет не компилил.
0
3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
09.12.2014, 00:57  [ТС] 30
Тоже слоу мо. Но когда запускаю это а потом игру все прекрасно. Это будильник каждую секунду вызывает Time и сверяет с едитами.
Изображения
 
0
3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
09.12.2014, 01:02  [ТС] 31
Ты в какой дельфе компилишь? ехе-шник всего 2 метра. у меня 10 метров стабильно (ХЕ3)
0
пофигист широкого профиля
4731 / 3166 / 858
Регистрация: 15.07.2013
Сообщений: 18,231
09.12.2014, 02:42 32
Infernalboy, я бы ещё взглянул бы на тот "будильник с использованием Таймера моего исполнения".
Точнее на его код. Есть у меня некие мысли связанные с тем, что обычная Виндусовая "Косынка" разбрасывает карты гораздо шустрее, если при этом возить мышкой.
0
3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
09.12.2014, 04:06  [ТС] 33
Цитата Сообщение от northener Посмотреть сообщение
Infernalboy, я бы ещё взглянул бы на тот "будильник с использованием Таймера моего исполнения".
Точнее на его код. Есть у меня некие мысли связанные с тем, что обычная Виндусовая "Косынка" разбрасывает карты гораздо шустрее, если при этом возить мышкой.
У тебя проблемы с логическим мышлением? ну как бэ на

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
unit alarm;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.MPlayer, Vcl.StdCtrls, Vcl.ExtCtrls;
 
type
  TForm13 = class(TForm)
    Timer1: TTimer;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Label1: TLabel;
    MediaPlayer1: TMediaPlayer;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    Label2: TLabel;
    Button3: TButton;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form13: TForm13;
  opened:boolean;
implementation
 
{$R *.dfm}
 
procedure TForm13.Button1Click(Sender: TObject);
var s:string;
begin
if opendialog1.Execute then
begin
 mediaplayer1.FileName:=opendialog1.Files[0];
 s:= opendialog1.Files[0];
 //showmessage(extractfilepath(opendialog1.Files[0]));
 delete(s,1,length(extractfilepath(opendialog1.Files[0])));
 Label1.Caption:='File:'+ s ;
 mediaplayer1.Open;
 mediaplayer1.Enabled:=true;
 opened:=true;
end;
end;
 
procedure TForm13.Button2Click(Sender: TObject);
begin
if timer1.Enabled then
 timer1.Enabled:=false
 else
 if opened then
 begin
 timer1.Enabled:=true;
 button3.Enabled:=true;
 end
 else showmessage('File not chousen');
end;
 
procedure TForm13.Button3Click(Sender: TObject);
begin
form13.Hide;
end;
 
procedure TForm13.FormCreate(Sender: TObject);
begin
//showmessage(timetostr(time));
end;
 
procedure TForm13.Timer1Timer(Sender: TObject);
var s,t:string;
 
begin
  s:=edit1.Text+':'+edit2.Text+':00';
  T:=timetostr(time);
  Label3.Caption:='Time:'+T;
  if pos(s,t)>0 then
  begin
 
    mediaplayer1.Play;
    button3.Enabled:=false;
    form13.Show;
    timer1.Enabled:=false;
  end;
end;
 
end.
0
пофигист широкого профиля
4731 / 3166 / 858
Регистрация: 15.07.2013
Сообщений: 18,231
09.12.2014, 04:16 34
Цитата Сообщение от Infernalboy Посмотреть сообщение
У тебя проблемы с логическим мышлением? ну как бэ на
Проблема не у меня, а у тебя.
Ну "как бэ" пошел бы ты тогда лесом на север.

P.S. А мои мысли подтвердил сей код.
0
3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
09.12.2014, 04:24  [ТС] 35
Цитата Сообщение от northener Посмотреть сообщение
Проблема не у меня, а у тебя.
Ну "как бэ" пошел бы ты тогда лесом на север.

P.S. А мои мысли подтвердил сей код.
Ты что обиделся что ли? мог бы просто сказать дай код. ни кого обижать не хотел.
0
842 / 737 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
09.12.2014, 04:40 36
Infernalboy,
Поток есть, поток если ты не задал по умолчанию приоритет на какой-либй поток, то они будут выполнятся по очереди. Если чо меня FEI поправит.
0
3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
09.12.2014, 04:49  [ТС] 37
с этим я согласен, но выполнение будет атомарным. Ну а приоритеты я поставил оба нормал.
0
842 / 737 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
09.12.2014, 05:14 38
А вобще по идее количетво потоков равно быть элементам их обрабатывающюх элементов (ну типа массива что ли)
Ну я точно не знаю просто версия пришла на ум.
FIL- здесь все решает.

Infernalboy, слыш ты
Потоки могут могут друг друга и ждать- все зависит от выполнения задачи,
а могут и не жддать а выполнятся так как они успеют, все зависит от задачи твоей.
0
3 / 7 / 1
Регистрация: 30.09.2014
Сообщений: 61
09.12.2014, 06:27  [ТС] 39
У меня они никого не ждут) Синхронизации вообще никакой. Я их для того и делал чтобы они выполнялись асинхронно.
0
Модератор
3490 / 2613 / 741
Регистрация: 19.09.2012
Сообщений: 7,974
09.12.2014, 09:41 40
Цитата Сообщение от Infernalboy Посмотреть сообщение
ехе-шник всего 2 метра.
В современных Дельфях есть 2 режима компиляции:
- Debug - отладочный, когда в ЕХЕ добавляется куча отладочной информации и прочей фигни.
- Release - релизный, где нет ничего лишнего.
Название: 11.jpg
Просмотров: 35

Размер: 16.7 Кб

Запустил игру на работе - там тормоза есть, причем только если Дельфи не запущен.
Пока не понял в чем причина...

Цитата Сообщение от northener Посмотреть сообщение
А мои мысли подтвердил сей код.
Поделишься?
1
09.12.2014, 09:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2014, 09:41
Помогаю со студенческими работами здесь

NumericUpDown обрабатывая событие ValueChanged, после нажатия кнопок прибавить/убавить на единицу, выдает старое значение
Добрый день. Возникла следующая ситуация, при нажатии на стандартную кнопу numericUpDown мне...

атака на физику?
Может не по теме, но кто что думает о многочисленных задачах от нескольких участников в последнее...

Сочините физику
В играх, например, тоже есть физика. Но кто сказал,ч то она должна соотвествовать реальности? Мир...

Сочините физику
Сочините, пожалуйста, непротиворечивую физику на следующих положениях: 1. Скорость света конечна и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru