elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como ejecutar procesos en segundo plano
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como ejecutar procesos en segundo plano  (Leído 4,790 veces)
hiisoka

Desconectado Desconectado

Mensajes: 1


Ver Perfil
como ejecutar procesos en segundo plano
« en: 27 Noviembre 2014, 21:04 pm »

lo que pasa es que estoy programando en c++ y mi problema es que quiero usar beeps para poner musica de fondo pero si Hago esto no puedo realiZar otras acciones Hasta que terminen los beeps, mi pregunta es como puedo hacer para realiZar dos acciones distintas al mismo tiempo

Por ejemplo me gustaria realizar un videojuego el personaje lo muevo con las teclas pero por desirlo asi los enemigos quiero que se muevan por si solos sin nesesidad de apretar una tecla, como podria mover el mono y al mismo tiempo que se muevan los enemigos y se escuchen los beeps, por que cuando lo realiso si pongo primero los beeps tengo que esperar a que se terminen de ejecutar antes de poder mover al personaje quisiera poder moverlo mientras se ejecutan acciones diferentes


este es mi codigo

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream.h>
#include<windows.h>
#include<dos.h>
void main()
{
int x=20,y=23,y1;
char s='s',a;
 textcolor (BLUE);gotoxy(x+2,y-1);cprintf("%c",30);
  textcolor(BLUE);gotoxy(x,y); cprintf("%c|_|%c",17,16);
  textcolor(RED);gotoxy(x+1,y+1); cprintf("%c %c",31,31);
Beep ( 480 , 200 ) ;

    Beep ( 1568 , 200 ) ;

    Beep ( 1568 , 200 ) ;

    Beep ( 1568 , 200 ) ;



    Beep ( 739.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;


    Beep ( 369.99 , 200 ) ;

    Beep ( 392 , 200 ) ;

    Beep ( 369.99 , 200 ) ;

    Beep ( 392 , 200 ) ;

    Beep ( 392 , 400 ) ;

    Beep ( 196 , 400 ) ;



    Beep ( 739.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 739.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 739.99 , 200 ) ;

    Beep ( 83.99 , 200 ) ;

    Beep ( 880 , 200 ) ;

    Beep ( 830.61 , 200 ) ;

    Beep ( 880 , 200 ) ;

    Beep ( 987.77 , 400 ) ;


    Beep ( 880 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 698.46 , 200 ) ;

    Beep ( 739.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 739.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 739.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 880 , 200 ) ;

    Beep ( 830.61 , 200 ) ;

    Beep ( 880 , 200 ) ;

    Beep ( 987.77 , 400 ) ;

      Sleep ( 200 ) ;

    Beep ( 1108 , 10 ) ;
    Beep ( 1174.7 , 200 ) ;
    Beep ( 1480 , 10 ) ;
    Beep ( 1568 , 200 ) ;


    Sleep ( 200 ) ;
    Beep ( 739.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 739.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 739.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 880 , 200 ) ;

    Beep ( 830.61 , 200 ) ;

    Beep ( 880 , 200 ) ;

    Beep ( 987.77 , 400 ) ;


    Beep ( 880 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 698.46 , 200 ) ;


    Beep ( 659.25 , 200 ) ;

    Beep ( 698.46 , 200 ) ;

    Beep ( 784 , 200 ) ;

    Beep ( 880 , 400 ) ;

    Beep ( 784 , 200 ) ;

    Beep ( 698.46 , 200 ) ;

    Beep ( 659.25 , 200 ) ;



    Beep ( 587.33 , 200 ) ;

    Beep ( 659.25 , 200 ) ;

    Beep ( 698.46 , 200 ) ;

    Beep ( 784 , 400 ) ;

    Beep ( 698.46 , 200 ) ;

    Beep ( 659.25 , 200 ) ;

    Beep ( 587.33 , 200 ) ;



    Beep ( 523.25 , 200 ) ;

    Beep ( 587.33 , 200 ) ;

    Beep ( 659.25 , 200 ) ;

    Beep ( 698.46 , 400 ) ;

    Beep ( 659.25 , 200 ) ;

    Beep ( 587.33 , 200 ) ;

    Beep ( 493.88 , 200 ) ;

    Beep ( 523.25 , 200 ) ;


    Sleep ( 400 ) ;
    Beep ( 349.23 , 400 ) ;

    Beep ( 392 , 200 ) ;

    Beep ( 329.63 , 200 ) ;

    Beep ( 523.25 , 200 ) ;

    Beep ( 493.88 , 200 ) ;

    Beep ( 466.16 , 200 ) ;



    Beep ( 440 , 200 ) ;

    Beep ( 493.88 , 200 ) ;

    Beep ( 523.25 , 200 ) ;

    Beep ( 880 , 200 ) ;

    Beep ( 493.88 , 200 ) ;

    Beep ( 880 , 200 ) ;

    Beep ( 1760 , 200 ) ;

    Beep ( 440 , 200 ) ;



    Beep ( 392 , 200 ) ;

    Beep ( 440 , 200 ) ;

    Beep ( 493.88 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 440 ,  200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 1568 , 200 ) ;

    Beep ( 392 , 200 ) ;



    Beep ( 349.23 , 200 ) ;

    Beep ( 392 , 200 ) ;

    Beep ( 440 , 200 ) ;

    Beep ( 698.46 , 200 ) ;

    Beep ( 415.2 , 200 ) ;

    Beep ( 698.46 , 200 ) ;

    Beep ( 1396.92 , 200 ) ;

    Beep ( 349.23 , 200 ) ;



    Beep ( 329.63 , 200 ) ;

    Beep ( 311.13 , 200 ) ;

    Beep ( 329.63 , 200 ) ;

    Beep ( 659.25 , 200 ) ;

    Beep ( 698.46 , 400 ) ;

    Beep ( 783.99 , 400 ) ;



    Beep ( 440 , 200 ) ;

    Beep ( 493.88 , 200 ) ;

    Beep ( 523.25 , 200 ) ;

    Beep ( 880 , 200 ) ;

    Beep ( 493.88 , 200 ) ;

    Beep ( 880 , 200 ) ;

    Beep ( 1760 , 200 ) ;

    Beep ( 440 , 200 ) ;



    Beep ( 392 , 200 ) ;

    Beep ( 440 , 200 ) ;

    Beep ( 493.88 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 440 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 1568 , 200 ) ;

    Beep ( 392 , 200 ) ;



    Beep ( 349.23 , 200 ) ;

    Beep ( 392 , 200 ) ;

    Beep ( 440 , 00 ) ;

    Beep ( 698.46 , 200 ) ;

    Beep ( 659.25 , 200 ) ;

    Beep ( 698.46 , 200 ) ;

    Beep ( 739.99 , 200 ) ;

    Beep ( 783.99 , 200 ) ;

    Beep ( 392 , 200 ) ;

    Beep ( 392 , 200 ) ;

    Beep ( 392 , 200 ) ;

    Beep ( 392 , 200 ) ;

    Beep ( 196 , 200 ) ;

    Beep ( 196 , 200 ) ;

    Beep ( 196 , 200 ) ;



    Beep ( 185 , 200 ) ;

    Beep ( 196 , 200 ) ;

    Beep ( 185 , 200 ) ;

    Beep ( 196 , 200 ) ;

    Beep ( 207.65 , 200 ) ;

    Beep ( 220 , 200 ) ;

    Beep ( 233.08 , 200 ) ;

    Beep ( 246.94 , 200 ) ;
while(s=='s')
 {
  a=getch();
  textcolor(BLACK);gotoxy(x,y); cprintf("%c|_|%c",17,16);
  gotoxy(x+2,y-1);cprintf("%c",30);
  gotoxy(x+1,y+1); cprintf("%c %c",31,31);
  if(a=='a')
  {
  x=x-4;
  }
  if(a=='d')
  {
  x=x+4;
  }
  if(a=='s')
  {
  y=y+4;
  }
  if(a=='w')
  {
  y=y-4;
  }
  textcolor (BLUE);gotoxy(x+2,y-1);cprintf("%c",30);
  textcolor(BLUE);gotoxy(x,y); cprintf("%c|_|%c",17,16);
  textcolor(RED);gotoxy(x+1,y+1); cprintf("%c %c",31,31);
  if(a=='l')
  {
    Beep(440,500);
  for(y1=y;y1>3;y1--)
   {

   textcolor (GREEN);gotoxy(x+2,y1-2);cprintf("%c",254);
   Sleep(15);
   textcolor (BLACK);gotoxy(x+2,y1-2);cprintf("%c",254);
   }
  }
 }
}


« Última modificación: 27 Noviembre 2014, 21:25 pm por hiisoka » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: como ejecutar procesos en segundo plano
« Respuesta #1 en: 27 Noviembre 2014, 21:14 pm »

Tendrás que dar mas detalles... no se entiende que pasa o quieres...


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: como ejecutar procesos en segundo plano
« Respuesta #2 en: 27 Noviembre 2014, 21:24 pm »

Hola, podrías crear un hilo separado usando CreateThread si estas en windows.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspx


Saludos.
En línea

kafok

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Re: como ejecutar procesos en segundo plano
« Respuesta #3 en: 27 Noviembre 2014, 22:00 pm »

Vamos a ver, antes de meterte en multi-thread, que en windows tienes aqui la documentacion (en ingles): http://msdn.microsoft.com/en-us/library/windows/desktop/ms684852(v=vs.85).aspx  Debes tener clara una cosa, en un juego vamos a tener un codigo ejecutandose en un bucle. En ese bucle cada iteraccion se considera que es un frame o una imagen a mostrar por pantalla. Cada iteraccion actualizara los estados los objetos de la escena entre otras cosas y por ultimo las pintara. Sigue el siguiente orden:
    Bucle:
        Actualizar fisica
        Actualiar pantalla (pintar)
    fin-bucle

-Actualizar pantalla: esta claro lo que es, simplemente pinta los objetos segun su estado (posicines, tamaños...)

-Actualizar fisica: esto es un poco mas complejo, la fisica de un juego depende del juego y puede ser mas o menos compleja. Para mover al jugador en algun momento debes comprobar que se presiona la tecla para moverlo en cada direccion, si es asi desplazmos en el eje de coordenadas que correspondo tantas unidades como velocidad quieras que se mueva ese objeto*. Luego mueves a los enemigos segun las condiciones que rijas tú, y despues comprueba si chocan. Despues de todas esta comprobaciones tienes que tener los objetos actualizados (en posicion, por ejemplo) y listos para ser pintados.

Al ser pintados me refiero que imprimas por consola el caracter/texto en la posicion que tengas, porque veo que es una simple aplicacion de consola (he hablado lo mas generico que pude, los juegos 3d con graficazos tambien funcionan asi)


*el tema velocidad dependera de la velocidad del ordenador, una velocidad 10 puede ir muy lento en un ordenador antiguo y demasiado rapido en un ordenador bueno. Para eso existen tecnicas complejas como el tiempo delta, o si es un juego que no consume recursos como es tu caso limitar a un numero cualquiera las iteracciones de tu bucle, pero ya te digo este tema es algo complejo
En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: como ejecutar procesos en segundo plano
« Respuesta #4 en: 28 Noviembre 2014, 17:01 pm »

funciones como beep hace poner e hilo en modo alertable, es como que utilices Sleep ( En realidad le llama ), asi que ¿porqué no usar funciones que ya fueron diseñadas para propositos como reproducir un musica o sonido? No veo la necesidad de usar Beep para lo que estas intentando hacer.

mciSendString
http://msdn.microsoft.com/en-us/library/windows/desktop/dd757161%28v=vs.85%29.aspx
PlaySound:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd743680(v=vs.85).aspx
Midi's
http://msdn.microsoft.com/en-us/library/windows/desktop/dd798495(v=vs.85).aspx
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines