como ejecutar procesos en segundo plano

Iniciado por hiisoka, 27 Noviembre 2014, 21:04 PM

0 Miembros y 1 Visitante están viendo este tema.

hiisoka

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);
   }
  }
}
}

engel lex

Tendrás que dar mas detalles... no se entiende que pasa o quieres...
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


kafok

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

x64core

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