JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=d78f9627b4d079ec1cbbdf9f7a026b34Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Frage zu ExitThread

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 18.01.2006, 18:11    Titel: Frage zu ExitThread Antworten mit Zitat

Hey,

ich bin dabei mir einen kleinen Mp3-Player zu bauen,
der bei Computerspielen im Hintergrund laufen soll.

Verwiklichen tue ich das mit mci.

Hier der wichtigste Code:

CPP:
bool CDirectAudio::MP3Playing(void)
{
   return m_mp3Playing;
}

DWORD WINAPI CDirectAudio::PlayMp3( LPVOID lpParam )
{
   mciSendString("open  file.mp3 alias fileid", NULL, 8, NULL);
   mciSendString("play  file.mp3 wait", NULL, 0, NULL);
   mciSendString("close file.mp3", NULL, 0, NULL);
   return 0;
}

void CDirectAudio::StartMP3Player(void)
{
     GetExitCodeThread(
                     CreateThread(
                                  NULL,
                                     0,
                               PlayMp3,
                                     0,
                                     0,
                                    0),
                 &m_mp3dwThreadExitCode);
      m_mp3Playing = true;
}

void CDirectAudio::StoppMP3Player(void)
{
   
   if(m_mp3dwThreadExitCode) ExitThread(m_mp3dwThreadExitCode);
   m_mp3Playing = false;
}


Was dabei nicht funktioniert ist ExitThread, womit ich den Player beenden will.
Wenn die Funktion aufgerufen wird bricht das Programm (fast) komplett ab ...
Muss man bei ExitThread zusätzlich noch etwas beachten !?
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 18.01.2006, 18:24    Titel: Antworten mit Zitat

In der MSDN gibt es mehr als 5 Samples nur über Threads Wink Schnupper da doch mal rein Smile oder wenn Du den Petzold hast (sollte man haben Wink) steht auch über ein ganzes Kapitel drin.

Eine Frage habe ich jedoch: Wozu setzt Du einen Alias wenn Du diesen sowieso nicht benutzt? und ich sehe keinen MCI-Command String für das Beenden des Abspielens. Du kannst kein MCI einfach so "vernichten". Du musst das wenn schon Ordnungsgemäß deaktivieren.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 18.01.2006, 21:27    Titel: Antworten mit Zitat

Danke Danke Wink

Du hast mich auf den richtigen Lösungsansatz gebracht -
Und Msdn ist mir heute von einer neuen Seite erschienen Very Happy

Ich habe das Problem jetzt komplett ohne Threads umgesetzt und läuft ganzgut Wink

Eins stimmt aber noch nicht (hat aber nichts mit mci zu tun)

CPP:
void CDirectAudio::StartMP3Player(void)
{
   if(m_mp3PlayListOpen && m_vMP3Files.size()>0)
   {

   FilePath__MCI = m_vMP3Files[ (rand()%m_vMP3Files.size())];
   FilePath__MCI = "open \""+FilePath__MCI+"\" alias fileid";

   mciSendString(FilePath__MCI.c_str(), NULL, 8, NULL);
   mciSendString("play  fileid from 0", NULL, 0, NULL);
   m_mp3Playing = true;
   }
}


Hier bringt rand() zwar beim ersten aufruf eine zufällige Zahl, anschließend aber immer die selbe ...
Obwohl ich zu begin

srand(timeGetTime());

verwendet habe ... normal sind die Zahlen auch immer zuifällig -- gibt's dafür einen bestimmten Grund ?
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 19.01.2006, 07:06    Titel: Antworten mit Zitat

Hi,

dieses Beispiel stammt aus der MSDN. Es ist so abgeändert das es Zahlen zwischen 0-9 einschließlich ausgibt.

CPP:
/* RAND.C: This program seeds the random-number generator
 * with the time, then displays 10 random integers.
 */


#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
   int i;

   /* Seed the random-number generator with current time so that
    * the numbers will be different every time we run.
    */

   srand( (unsigned)time( NULL ) );

   /* Display 10 numbers. */
   for( i = 0;   i < 10;i++ )
      printf( "  %6d\n", rand()%10 );
}


Wenn du anstelle von %10 dein %m_vMP3Files.size() einfügst bekommst du deine Zufallszahlen.

MFG Chriss
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 04.02.2006, 18:12    Titel: Antworten mit Zitat

Aber genau so hatte ich das ja auch gemacht .. wie der Quellcode in meiner letzten Post zeigt.

Ich weiß auch nicht woran das liegen soll ...
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proggaholic
Junior JLI'ler


Alter: 36
Anmeldedatum: 07.05.2005
Beiträge: 85
Wohnort: Heap
Medaillen: Keine

BeitragVerfasst am: 03.05.2006, 16:51    Titel: Antworten mit Zitat

Bei uns im Geschäft hatte ein Projektteam ein ähnliches Problem, die waren auf die ersten Zufallszahlen angewiesen. Der Kollege, der das Problem zu beheben versuchte, hat eine Schleife eingerichtet, die in etwa so aussah:

CPP:
    srand(time(NULL));

    for (unsigned int i = 0; i < 10; i++)
    {
        // Hier wird die Zufallszahl ueberhaupt nicht verwendet
        rand();
    }

    // Erst nach dem 11. "rand()"-Aufruf wird die Zufallszahl verwendet
    int meineZufallszahl = rand();


Damit hat er die ersten 10 Zufallszahlen praktisch ignoriert und erst die 11. wirklich genutzt, die dann meines Wissens nach komplett zufällig war. Ob das die beste Möglichkeit ist, weiss ich nicht, aber vielleicht hilft es dir ja fürs erste.

mfg
proggaholic
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden MSN Messenger
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 04.05.2006, 22:34    Titel: Hey Antworten mit Zitat

Danke für deine Antwort Wink

Lag aber nicht an dem rand() bei mir wie ich festgestellt habe.
Ist etwas her, desswegen erinnere ich mich nicht zu 100%, hatte aber was damit zu tuen, das elemente aus einer Liste nicht vorhanden waren -> Eine komplett andere Fehlerquelle.

PS: Dein Lösungsansatz wirkt sehr bizarre auf mich ^^ - ich bin mir sicher das man auch eine weniger gefriemelte Lösung findet Wink
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum