Ir ao conteúdo

Posts recomendados

Postado

Tenho um cenário atualmente, onde eu abro um programa em C, é dentro dele tem uma função que chama o allegro para abrir em determinado momento, porém não estou conseguindo fechar corretamente o allegro.

 

O que eu fiz foi criar essa função chamada de fechar

void fechar(){
   allegro_exit();
}

é chamei essa função, habilitando o botão de fechar do allegro pelo comando

 

        set_close_button_callback(fechar);
Porém, creio que deveria fazer algo a mais, pois a janela do allegro "finge" que fecha, mas continua bugada na barra de ferramentas do windows, só fecha mesmo quando eu fecho o cmd.

 

Alguma sugestão pra melhorar isso?, resolveria também com um ESQ, mas queria habilitar o botão de fechar para ficar mais fácil.

Postado

Acho que não funciona chamando uma função do C++, tem que usar as próprias callback do Allegro para fechar no X.

 

Algo mais ou menos assim:

 

#include <allegro.h>

volatile int saiu = false;
void fechar() { saiu = true; }
END_OF_FUNCTION(fechar)

int main()
{
  allegro_init();
  install_keyboard();
  set_color_depth(32);
  set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
  set_window_title("Teste");

  LOCK_FUNCTION(fechar);
  set_close_button_callback(fechar);

  while (!saiu) {}
}
END_OF_MAIN();

 

 

  • Curtir 1
Postado
  Em 20/10/2017 às 03:26, Benjamin Breeg disse:

Acho que não funciona chamando uma função do C++, tem que usar as próprias callback do Allegro para fechar no X.

 

Algo mais ou menos assim:

 

#include <allegro.h>

volatile int saiu = false;
void fechar() { saiu = true; }
END_OF_FUNCTION(fechar)

int main()
{
  allegro_init();
  install_keyboard();
  set_color_depth(32);
  set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0);
  set_window_title("Teste");

  LOCK_FUNCTION(fechar);
  set_close_button_callback(fechar);

  while (!saiu) {}
}
END_OF_MAIN();

 

 

Expandir  

 

Entendi, o meu não roda somente com isso, um inteiro que definiu pra saiu, ele não reconhece o false, a menos que essa volatile antes do int, modifique para um tipo boolean, que tentei tmb, mas não deu muito certo.

 

O meu allegro é 4.2 não o 5 (não sei qual é a sua)

 

iFg4k217Q56qSvN0qSHWNg.png

Postado

Resolução definitiva:

 

Váriavel global, como estava fazendo

volatile int exit_program;
void fecha_programa() { exit_program = TRUE; }
END_OF_FUNCTION(fecha_programa)

e, esse código onde quer que habilite para fechar.

	exit_program = FALSE;
    LOCK_FUNCTION(fecha_programa);
    LOCK_VARIABLE(exit_program);
    set_close_button_callback(fecha_programa);

 

Falto só trancar a variável, @Benjamin Breeg

 

Deu tudo certo, obrigado pelo help

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!