Cree una simple ventana que no hace nada y acabo de descubrir que la aplicación de Bennu se mantiene constantemente consumiendo un 90% aproximadamente del CPU.
El bucle principal que utilizo para mantener la ventana abierta es este :
Repeat
frame;
Until( key(_ESC) || exit_status )
Al pasarle cualquier numero al operador frame no pasa nada, sigue consumiendo 90% del CPU, tampoco no eh podido encontrar una función tipo Sleep() para poder darle un descanso al CPU.
Por otro lado yo no se si esto pasa también con la versión para Android, pero me preocupa mucho si esto también pasa en Android.
No es bueno que una aplicación se mantenga constantemente consumiendo el 90% o 100% del CPU innecesariamente y esto seria mucho peor si esto también pasa con dispositivos móviles.
Por favor ¿alguien sabe como puedo solucionar esto?.
entonces segun tu logica, si tienes varios procesos ya necesitas conectarse a la nasa para correr tu juego ;D
Deberias meter la app completa aqui de ejemplo y lo porbamos en nuestras maquinas
No es normal. ¿Que versión de Bennu estás utilizando? Por otro lado, postea el código completo para ver si hay algo raro...
Quote from: FreeYourMind on September 02, 2015, 05:28:59 AM
entonces segun tu logica, si tienes varios procesos ya necesitas conectarse a la nasa para correr tu juego ;D
Deberias meter la app completa aqui de ejemplo y lo porbamos en nuestras maquinas
Yo no dije eso que estas tratando de decir, en el caso de Windows, si un proceso esta consumiendo el 90% del CPU sin hacer nada, igual el SO sigue procesando los demás procesos con normalidad y sin problemas, aun si hay otros procesos que también consumen el 90% del CPU sin hacer nada.
Se sabe que cuando programas con SDL 1.2 hay que agregar un SDL_delay( 1 ); al final del bucle principal para evitar este problema. Yo no se si Bennu hace esto porque aun no me eh fijado en el código de Bennu.
Quote from: warrior_rockk on September 02, 2015, 07:33:57 AM
No es normal. ¿Que versión de Bennu estás utilizando? Por otro lado, postea el código completo para ver si hay algo raro...
La versión de Bennu que estoy utilizando es la ultima versión oficial publicada en la pagina oficial (bgd-1.0.0-r307-win32.rar)
Este es el script completo que estoy desarrollando como base para mis proyectos :
Program app_base;
import "mod_proc"; // let_me_alone, ...
import "mod_wm"; // set_title, ...
import "mod_video"; // mode_is_ok, set_mode, set_fps, ...
import "mod_key"; // key
import "mod_text";
import "mod_say";
// App Config
// =============================================================================
global
string _win_title = "app_base";
int _flags = MODE_WINDOW;
short _win_width = 512;
short _win_height = 384;
short _full_width = 1680;
short _full_height = 1050;
short _desk_width = 1024; // _full_width;
short _desk_height = 768; // _full_height;
short _width = 512; // _win_width;
short _height = 384; // _win_height;
byte _bpp = MODE_32BITS; // MODE_8BITS, MODE_16BITS, MODE_32BITS
byte _fps = 60;
byte _fps_skip = 0;
bool _fullscreen = false; // false, true
bool _hardware = true;
bool _double_buffer = true;
bool _vsync = true;
bool _border = true;
bool _2xscale = false;
// --- Android Config ---
bool _android_release = false; // false, true
bool _landscape = true; // false, true
// --- PSP Config ---
bool _psp_release = false; // false, true
end
// Functions Declaration
// =============================================================================
declare function app_setup(); end
declare process main( void ); end
// =============================================================================
function app_setup()
// =============================================================================
private
short _temp_width;
short _temp_height;
end
begin
if ( (OS_ID == OS_ANDROID) || (OS_ID == OS_IOS) )
_android_release = true;
end
if ( _android_release )
if ( _landscape )
_desk_width = 800;
_desk_height = 480;
else
_desk_width = 480;
_desk_height = 800;
end
_fullscreen = true;
if ( (OS_ID != OS_ANDROID) && (OS_ID != OS_IOS) )
_fullscreen = false;
get_desktop_size( &_temp_width, &_temp_height );
move_window( ((_temp_width / 2) - (_desk_width / 2)), ((_temp_height / 2) - (_desk_height / 2)) );
else
get_desktop_size( &_desk_width, &_desk_height );
end
_win_width = _desk_width;
_win_height = _desk_height;
_full_width = _desk_width;
_full_height = _desk_height;
if ( _fps > 30 ) _fps_skip = 30; end
else
get_desktop_size( &_desk_width, &_desk_height );
if ( _full_width > _desk_width ) _full_width = _desk_width; end
if ( _full_height > _desk_height ) _full_height = _desk_height; end
if ( OS_ID == 1001 ) // OS_PSP )
_psp_release = true;
end
if ( _psp_release )
_desk_width = 480;
_desk_height = 272;
_win_width = _desk_width;
_win_height = _desk_height;
_full_width = _desk_width;
_full_height = _desk_height;
_fullscreen = true;
if ( OS_ID != 1001 ) // OS_PSP )
_fullscreen = false;
get_desktop_size( &_temp_width, &_temp_height );
move_window( ((_temp_width / 2) - (_desk_width / 2)), ((_temp_height / 2) - (_desk_height / 2)) );
end
if ( _fps > 30 ) _fps_skip = 30; end
else
if ( !_fullscreen )
move_window( (_desk_width / 2) - (_win_width / 2), (_desk_height / 2) - (_win_height / 2) );
end
end
end
_width = _win_width;
_height = _win_height;
if ( !_border ) _flags += MODE_FRAMELESS; end
if ( _fullscreen )
_width = _full_width;
_height = _full_height;
_flags = MODE_FULLSCREEN + MODE_FRAMELESS;
end
if ( _hardware ) _flags += MODE_HARDWARE; end
if ( _double_buffer ) _flags += MODE_DOUBLEBUFFER; end
if ( _vsync ) _flags += MODE_WAITVSYNC; end
if ( _2xscale ) _flags += MODE_2XSCALE; end
set_title( _win_title );
set_fps ( _fps, _fps_skip );
set_mode ( _width, _height, _bpp, _flags );
end
// =============================================================================
process main( void )
// =============================================================================
begin
let_me_alone();
app_setup();
let_me_alone();
Repeat
frame;
Until( key(_ESC) || exit_status )
let_me_alone();
end
Aclaro que esto en la plataforma PC no es una problema grave, pero tampoco no es algo que debería pasar.
Perdón, ya descubrí cual es el problema.
El problema esta en el sincronizado vertical, si a la variable "bool _vsync = true;" la inicializo en "false", mi CPU se mantiene en un 10% de consumo.
Por ahora no usaré el sincronizado vertical, para evitar ese exceso de consumo de CPU.