Skocz do zawartości

[C++] Zakończenie wątku po przejściu pętli


Krzywilk

Polecane posty

Witam

W mojej "grze" wywołuje stoper, który ma zakończyć się po przejściu pętli (sam wątek startuje poza nią), i teraz moje pytanie jak to zrobic?

#include <iostream>
#include <conio.h>
#include <time.h>
#include <stdlib.h>
#include <windows.h>
#include <fstream>
#include <string>
#include <process.h>
using namespace std;
typedef unsigned short USHORT;
HANDLE g_handle;
void SetPos(USHORT x,USHORT y)
{
  COORD cp = {x,y};
  SetConsoleCursorPosition(g_handle,cp);
}
void narysujPlik(string _nazwa)
{
 string linia;
 ifstream plik (_nazwa.c_str());

 if (plik.is_open())
 {
while ( plik.good() )
{
 	getline (plik,linia);
  cout << linia << endl;
}
plik.close();
 }
 else
 {
  cout << "Plik nie mogl zostac otwarty!" << endl;
 }
}
int zapis (float wynik,char imie[50], int czas)
{
ofstream wyniki;
wyniki.open("wynik.txt",ios::app);

wyniki<<imie<<" "<<wynik<<"kg "<<czas<<"ms "<< endl;

wyniki.close();
}

DWORD WINAPI stoper(PVOID pvParam)
{
  int start2;
int sekundy, setne;
int o =0;

start2 = clock();


       	while(o=1)
{
 sekundy = clock() - start2 ;
 setne = sekundy%1000/10;
 sekundy /= 1000;        
  printf(" %d : %2d : %2d : %2d\r", sekundy/3600, (sekundy/60)%60, sekundy%60, setne);
}

 return 0;
}
int main()
{
int przedzial,proby,poprawne=0,niepoprawne=0,bledy=0, kill=0;float wynik;//Zmienne okreslone konkretna nazwa (zmienne liczb ktore sa w dobrym miejscu itp.).
int los[5],moje[5],nieodpowiednie[5],odpowiednie[5];//"Nieodpowiednie"-tablica pomocnicza w ktorej zapisywane sa dane na temat liczb ktore sa ale nie tam gdzie powinny, "odpowiednie"-tablica pomocnicza w ktorej zapisywane sa dane na temat liczb ktore sa tam gdzie powinny, "moje"-liczby gracza, "los"-liczby wylosowane.
int i,j,w,k,c,z;//Zmienne nie okreslone konkretna nazwa (petle itp.).
char inne,zlecenie, pow, imie[50];//Zmienne typu "char".
long long int czas;//Zmienna potrzebna do mierzenia czasu.

cout<<"Podaj login ";
cin>>imie;
cout<<"Logowanie";Sleep(500);cout<<".";Sleep(500);cout<<".";Sleep(500);cout<<".";Sleep(500);cout<<"\n";

g_handle = GetStdHandle(STD_OUTPUT_HANDLE);
srand(time(0));
clock_t start, stop;
narysujPlik("Ziemia.txt");

cout<<"\n"<<"Gra zainspirowana Super master mind z 1972r."<<"\n";
cout<<"Witam "<<imie<<" baza danych zostala zaktualizowana poprawnie, w kazdym skarbcu ilosc zlota jest rowna zakresowi liczb/ilosc prob. Jezeli zakres jest wiekszy od 4 a tobie uda sie zlamac szyfr w mniej niz 7 probach zostaniesz nagrodzony mnoznikiem x30"<<"\n";
tak:

for (i=0;i<5;i++)
{
odpowiednie[i]=0;
nieodpowiednie[i]=0;
}

cout<<"Jak duzy przedzial liczb ma zawierac tajny szyfr?"<<"\n";
cin>>przedzial;
cout<<"W ilu probach go zlamiesz?"<<"\n";
cin>>proby;

int szyfry[proby][5]; //Ta tablica wyjatkowo pojawia sie nie w wierszu 10, poniewaz zimenia sie w zaleznosci od ilosci mozliwych prob, a gdy jest wczesniej wariuje.

if (przedzial==0||proby==0)
{
cout<<"Szukam odpowiedniego zlecenia";Sleep(1000);cout<<".";Sleep(1000);cout<<".";Sleep(1000);cout<<"."<<"\n";
cout<<"Niestety, w naszej bazie danych nie ma takiego zlecenia"<<"\n";
cout<<"Chcesz podjac sie innego?t/n"<<"\n";

 zlo:

inne=getch();

switch (inne)
{
 	case 116:
 	{
  	goto tak;
  	break;
 	}
 	case 110:
 	{
goto nie;
  	break;
 	}
 	default:
 	{
  	goto zlo;
     	break;
 	}
 }
}

cout<<"Szukam odpowiedniego zlecenia";Sleep(1000);cout<<".";Sleep(1000);cout<<".";Sleep(1000);cout<<"."<<"\n";
cout<<"Przechwytuje dane";Sleep(1000);cout<<".";Sleep(1000);cout<<".";Sleep(1000);cout<<"."<<"\n";

start=clock();  
//------------------------------------------------------------------------------------------------------------------------------------
DWORD IdWatku;
CreateThread(NULL, 0, stoper, (PVOID)kill, 0, &IdWatku); //Tu jest wywołany


for (i=0;i<5;i++)
{
los[i]=rand()%przedzial;
}
for (i=0;i<proby;i++)
{
 if (i>0)
 {
  cout<<"Chcesz zobaczyc swoje poprzednie szyfry?t/n"<<"\n";

  zlo2:

  pow=getch();

  switch (pow)
  {    
case 116:
{
for (c=0;c<i;c++)
{
 	cout<<"Szyfr nr."<<c+1<<" to ";
 	for(z=0;z<5;z++)
 	{
  	cout<<szyfry[c][z]<<" ";
 	}
 	cout<<endl;  
}
break;
}  
case 110:
  	{    
   	break;
  	}
  	default:
  	{
   	goto zlo2;
  		break;
  	}
  }
 }
for (j=0;j<5;j++)
{  
		cout<<"Podaj "<<j+1<<" liczbe szyfru!"<<"\n";
		cin>>moje[j];        
}
for (j=0;j<5;j++)
{
  	szyfry[i][j]=moje[j];
}
 for (j=0;j<5;j++)
 {
 	if (los[j]==moje[j])
 	{
     	poprawne++;
     	odpowiednie[j]=1;
 	}
 }
 for (w=0;w<5;w++)
 {   for (k=0;k<5;k++)
 	{
     	if (moje[w]==los[k]&&odpowiednie[k]==0&&k!=w&&odpowiednie[w]==0)
         	{
             	if (nieodpowiednie[k]==1)
             	{
                 	continue;
             	}
      		nieodpowiednie[k]=1;
      		niepoprawne++;
      		break;
         	}
 	}
 }
 if (poprawne==5)
 {
  stop=clock();
cout<<"Sprawdzam zgodnosc";;Sleep(500);cout<<".";Sleep(500);cout<<".";Sleep(500);cout<<"."<<"\n";
cout<<"Wylaczam alarm";Sleep(300);cout<<".";Sleep(300);cout<<".";Sleep(300);cout<<"."<<"\n";
 	cout<<"Alarm zostal wylaczony, skarbiec sie otwiera."<<"\n";

  break;
 }
 if (poprawne!=5)
 {
 	cout<<"Sprawdzam zgodnosc";Sleep(500);cout<<".";Sleep(500);cout<<".";Sleep(500);cout<<"."<<"\n";
 	cout<<"Dobrze ustawionych liczb jest "<<poprawne<<"."<<"\n"<<"Pojawiajacych sie ale nie w odpowiednim miejscu liczb jest "<<niepoprawne<<"."<<"\n";

  niepoprawne=0;
 	poprawne=0;

 }
 for (w=0;w<5;w++)
 {
 	nieodpowiednie[w]=0;
 	odpowiednie[w]=0;
 }
 	bledy++;
}
//tu ma się kończyć
//---------------------------------------------------------------------------------------------------------------------------------------------------
if (i==proby)
{
cout<<"Alarm niespodziewanie sie uruchomil, zostales zlapany!"<<"\n";
}

if (poprawne==5)
{
if (bledy<7 && przedzial>4)
{
 	wynik=((float)przedzial/(float)proby)*30;
  czas=(stop - start);
		zapis(wynik, imie, czas);

  cout<<"Uciekasz i nikt poza toba nie wie kto ukradl "<<wynik<<" kg zlota."<<"\n";
		cout<<"Czas ktory na to potrzebowales to "<<czas<<"ms"<<"\n";
}
 else
 {
  wynik=(float)przedzial/(float)proby;
  czas=(stop - start);
  zapis(wynik, imie, czas);

  cout<<"Uciekasz i nikt poza toba nie wie kto ukradl "<<wynik<<" kg zlota."<<"\n";
 	cout<<"Czas ktory na to potrzebowales to "<<czas<<"ms"<<"\n";
 }
}
niepoprawne=0;
poprawne=0;

cout<<"Chcesz zobaczyc historie rabunkow?t/n"<<"\n";

zlo3:

pow=getch();

switch (pow)
{    
  case 116:
  {
narysujPlik("wynik.txt");
break;
  }  
  case 110:
 	{    
  	break;
 	}
 	default:
 	{
  	goto zlo3;
     	break;
 	}
}

cout<<"Czy chcesz podjac inne zlecenie?t/n"<<"\n";

zlecenie=getch();

switch (zlecenie)
{
 case 116:
{
 	goto tak;
 	break;
}
case 110:
{
  goto nie;
 	break;
}
default:
{
 	goto zlo;
		break;
}
}

nie:

cout<<"Zapraszam wiec w innym terminie";
getch();
}

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...