Witam. Otóż tworzę taki schematowy odtwarzacz muzyki (bez odtwarzania dźwięków) tylko po prostu taką zasadę działania, że odlicza się czas kawałka, po czym przełącza się następny itp. W związku z tym chciałbym zapytać czy jest możliwość wykonywania funkcji w tle? Mam funkcję odtwarzanie, która pobiera z jednej tablicy tytuł, zaś z drugiej czas tego utworu. Zmniejsza go do zera i gdy to nastąpi pobiera kolejny i tak w kółko. Jednakże stan tej funkcji chciałbym sprawdzać w innej. Poniżej kod:
#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
class odtwarzacz
{
int glosnosc,stan,numer,pozostalo,temp;
char utwor[50];
public:
void wysun();
void odtwarzaj(int czas[], char utwory[9][70]);
void poprzedni();
void nastepny();
void pauza();
void stop();
void podglos();
void scisz();
void parametry(int czas[], char utwory[9][70]);
odtwarzacz(int u, bool p);
odtwarzacz()
{
strncpy(utwor,"Brak",50);;
glosnosc=0;
stan=0;
numer=0;
pozostalo=0;
temp=0;
}
};
void odtwarzacz::wysun(){
cout << "Wysuwanie tacki...\n";
//mciSendString("Set CDAudio Door Open wait", 0, 0, 0);
cout << "Tacka wysunieta, wloz plyte\n";
Sleep(3000);
cout << "Wsuwanie tacki...\n";
//mciSendString("Set CDAudio Door Closed wait", 0, 0, 0);
cout << "Tacka wsunieta, odtwarzanie plyty";
Sleep(2000);
if (stan==0) stan=1;
else stan=0;
}
void odtwarzacz::stop(){
if (stan==0) cout << "Brak plyty w odtwarzaczu";
else
{
cout << "Odtwarzanie zatrzymane";
strncpy(utwor,"Brak utworu",50);;
glosnosc=0;
}
cin.ignore();
getchar();
}
void odtwarzacz::odtwarzaj(int czas[], char utwory[9][70]){
pozostalo=czas[numer];
strncpy(utwor,utwory[numer],70);
if (stan==0) cout << "Brak plyty w odtwarzaczu";
else
{
do
{
pozostalo--;
if (pozostalo==0)
{
if (numer==9) numer=0;
else
{
numer+=1;
strncpy(utwor,utwory[numer],70);
pozostalo=czas[numer];
}
}
}
while(pozostalo>0);
}
cin.ignore();
getchar();
}
void odtwarzacz::parametry(int czas[], char utwory[9][70]){
if (stan==1) cout << "Stan: Plyta w srodku" << endl;
else cout << "Stan: Brak plyty" << endl;
cout << "Utwor: " << utwor << endl;
cout << "Glosnosc: " << glosnosc << "%" << endl;
cout << "Pozostaly czas: " << pozostalo << endl;
cin.ignore();
getchar();
}
void odtwarzacz::podglos(){
if (stan==0) cout << "Brak plyty w odtwarzaczu";
else
{
if (glosnosc<100)
{
glosnosc+=10;
cout << "Glosnosc: " << glosnosc << "%" << endl;
}
else if(glosnosc==100) cout << "Glosnosc max osiagnieta";
}
cin.ignore();
getchar();
}
void odtwarzacz::scisz(){
if (stan==0) cout << "Brak plyty w odtwarzaczu";
else
{
if (glosnosc>0)
{
glosnosc-=10;
cout << "Glosnosc: " << glosnosc << "%" << endl;
}
else if(glosnosc==0) cout << "Glosnosc min osiagnieta";
}
cin.ignore();
getchar();
}
int main(){
char utwory[9][70];
strncpy(utwory[0],"Armin van Buuren feat. Susana - Desiderium 207",70);
strncpy(utwory[1],"Armin van Buuren - Mirage",70);
strncpy(utwory[2],"Armin van Buuren feat. Christian Burns - This Light Between Us",70);
strncpy(utwory[3],"Armin van Buuren vs. Sophie Ellis Bextor - Not Giving Up On Love",70);
strncpy(utwory[4],"Armin van Buuren - I Don't Own You ",70);
strncpy(utwory[5],"Armin van Buuren - Full Focus",70);
strncpy(utwory[6],"Armin van Buuren - Coming Home",70);
strncpy(utwory[7],"Armin van Buuren - Orbion",70);
strncpy(utwory[8],"Armin van Buuren vs. Ferry Corsten - Minack",70);
strncpy(utwory[9],"Armin van Buuren - Youtopia",70);
int czas[9];
czas[0]=138;
czas[1]=250;
czas[2]=192;
czas[3]=385;
czas[4]=324;
czas[5]=453;
czas[6]=523;
czas[7]=231;
czas[8]=232;
czas[9]=232;
odtwarzacz cd;
int wybor;
do{
cout << "ODTWARZACZ MUZYKI\n" << endl;
cout << "MENU:" << endl << endl;
cout << "1. Wysun/wsun tacke" << endl;
cout << "2. Odtwarzaj" << endl;
cout << "3. Poprzedni" << endl;
cout << "4. Nastepny" << endl;
cout << "5. Pauza" << endl;
cout << "6. Stop" << endl;
cout << "7. Podglos" << endl;
cout << "8. Scisz" << endl;
cout << "9. Parametry" << endl;
cout << "10. Wylacz" << endl;
cout << "Opcja: ";
cin >> wybor;
switch (wybor)
{
case 1 : cd.wysun();break;
case 2 : cd.odtwarzaj(czas, utwory);break;
/*case 3 : cd.poprzedni();break;
case 4 : cd.nastepny();break;
case 5 : cd.pauza();break;*/
case 6 : cd.stop();break;
case 7 : cd.podglos();break;
case 8 : cd.scisz();break;
case 9 : cd.parametry(czas, utwory);break;
case 10 : break;
}
system("cls");
}
while (wybor!=10);
cin.ignore();
getchar();
return 0;
}
Z góry dziękuję za okazaną pomoc.