Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <stdio.h>
- #include <conio.h>
- #include <time.h>
- #include <random>
- #include <string>
- //---------------------------------------------------------------------------
- #pragma argsused
- // priorytety wątków
- int priorytety[3] = { THREAD_PRIORITY_BELOW_NORMAL,
- THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_ABOVE_NORMAL
- };
- HANDLE watki[200]; // dojścia (uchwyty) wątków
- // deklaracja funkcji wątku
- int numerki[200];
- DWORD WINAPI funkcja_watku( void* numer );
- void gotoxy(int x, int y)
- {
- COORD c;
- c.X = x - 1;
- c.Y = y - 1;
- SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
- }
- int myjnia = -1;
- int stany[200]={0};
- int eugenia = 0;
- int wypisywanie = 0;
- void wypisz(int numer, int stan){
- gotoxy(1,9+numer);
- printf(" \n");
- gotoxy(1,9+numer);
- if(stan == 0)
- printf( "Jezdze sobie Ja, samochod numer %d\n", numer );
- if(stan == 1)
- printf( "Stoje sobie Ja, samochod numer %d\n", numer );
- if(stan == 2)
- printf( "Korzystam sobie z myjni Ja, samochod numer %d\n", numer );
- if(stan == 3)
- printf( "Ja, samochod numer %d poleglem w bitwie o myjnie\n", numer );
- }
- void odswiez(){
- if(!wypisywanie){
- wypisywanie = 1;
- gotoxy(1,8);
- if(myjnia != -1)
- printf("Myjnia zajeta ");
- else
- printf("Myjnia jest pusta ");
- for(int i = 0; i < eugenia; i++){
- wypisz(i+1, stany[i]);
- }
- wypisywanie = 0;
- }
- }
- //---------------------------------------------------------------------------
- int main(int argc, char **argv)
- {
- int i;
- DWORD id; // identyfikator wątku
- system("cls");
- printf("Podaj ilosc samochodzikuff: \n");
- scanf("%d", &eugenia);
- printf( "Samosmrodki startuja, bedzie jezdzic %d samosmrodkow\n", eugenia);
- for (int i = 0; i < eugenia; i++){
- numerki[i] = i+1;
- }
- system("cls");
- // tworzenie wątków
- for( i = 0; i < eugenia; i++ )
- {
- watki[i] = CreateThread(
- NULL, // atrybuty bezpieczeństwa
- 0, // inicjalna wielkość stosu
- funkcja_watku, // funkcja wątku
- (void *)&numerki[i],// dane dla funkcji wątku
- 0, // flagi utworzenia
- &id );
- if( watki[i] != INVALID_HANDLE_VALUE )
- {
- printf( "Utworzylem samochod o identyfikatorze %x\n", id );
- // ustawienie priorytetu
- SetThreadPriority( watki[i],THREAD_PRIORITY_NORMAL );
- }
- }
- Sleep( 20000 ); // uśpienie wątku głównego na 20 s
- system("pause");
- return 0;
- }
- //---------------------------------------------------------------------------
- // trzy takie funkcje pracują współbieŜnie w programie
- DWORD WINAPI funkcja_watku( void* numerek )
- {
- srand (time(NULL));
- int moj_numerek = *((int*)numerek);
- unsigned int licznik = 0;
- int szatan;
- // rzutowanie struktury na własny wskaźnik
- Sleep( 1000 );
- // praca, wątki sa terminowane przez zakończenie programu
- // - funkcji main
- while( 1 )
- {
- szatan = rand() % 3;
- //gotoxy( licznik++ / 5000 + 5, moje_dane->parametr );
- if(szatan == 0){
- if(myjnia == moj_numerek){
- myjnia = -1;
- }
- stany[moj_numerek] = 0;
- odswiez();
- Sleep(((rand()%5)+5)*1000);
- }
- else if(szatan == 1){
- if(myjnia == moj_numerek){
- myjnia = -1;
- }
- stany[moj_numerek] = 1;
- odswiez();
- Sleep(((rand()%3)+3)*1000);
- }
- else {
- if(myjnia == -1 || myjnia == moj_numerek){
- myjnia = moj_numerek;
- stany[moj_numerek] = 2;
- odswiez();
- Sleep(((rand()%3)+4)*1000);
- }
- else
- {
- stany[moj_numerek] = 3;
- odswiez();
- Sleep(((rand()%3)+4)*1000);
- }
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment