Kashub's Code Barn - "wielowatkowosc pthread"

podświetlone jako c (dodał(a) lukiasz @ 2010-04-22 01:13:56)

Twoja wyszukiwarka
Podświetl ten kod w:
Ostatnio dodane:
Losowe wpisy:
#include <curses.h> /* stdio.h jest w curses.h */
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define sekunda 1000000
typedef struct  {
    int czas;
    int stan;
    char * liczba;
    pthread_t  watek1; /* Tworze zmienne, nie wskazniki */
    pthread_t  watek2;
} daneWatkow;
void *stoper(void *dane);
void *wpisz(void *dane);
 
int main() {
    char tempLiczba[15];
    daneWatkow *daneMain;
    daneMain=(daneWatkow*) malloc(sizeof(daneWatkow));
    daneMain->stan = -1;
    initscr();
    cbreak();
    mvprintw(1,1,"Podaj wartosc stopera: ");
    scanw("%d", &daneMain->czas);
    mvprintw(2,1,"Podaj liczbe: ");
    scanw("%s", &tempLiczba);
    daneMain->liczba = (char*) malloc(strlen(tempLiczba) + 1);
    strcpy(daneMain->liczba, tempLiczba);
    pthread_create(&daneMain->watek1, NULL, stoper, (void*) daneMain); /* Panietaj o adresie! Składnia: adres watka, parametry, wykonywana funkcja, przekazywany parametr*/
    clear();
    pthread_create(&daneMain->watek2, NULL, wpisz, (void*) daneMain); /* Jako parametr przekazuje cala strukture daneMain jako typ void*, jest to wymagane */
 
/* tu wykonuja sie watki, kod idzie dalej dopiero jak sie zakoncza*/
 
    pthread_join(daneMain->watek1, NULL);   /* tu nie ma adresu */
    pthread_join(daneMain->watek2, NULL);
    clear();
    if (daneMain->stan == 0) {
        mvprintw(4,4,"PRZEGRANA:\(");
        refresh();
        getch();
    }
    if (daneMain->stan == 1) {
        mvprintw(4,4,"WYGRANA:\)");
        refresh();
        getch();
    }
    endwin();
    free(daneMain->liczba);
    free(daneMain);
    return 0;
}
 
void *stoper(void *dane) {
    int i;
    daneWatkow *daneRzut;
    daneRzut=(daneWatkow*) dane; /* Trzeba zrzutowac parametr z typu void* na ten typ, ktory byl wczesniej */
 
    clear();
    for (i=0; i<=10*(daneRzut->czas); i++) {
        mvprintw(2,1,"%.1f",(daneRzut->czas)-i*0.1); /* z jednym miejscem po przecinku */
        clrtoeol(); /* czysci do konca linii */
        move(9,9);
        refresh();
        usleep(sekunda/10);
        move(9,9);
    }
    daneRzut->stan = 0;
    pthread_cancel(daneRzut->watek2);
    return (void*) daneRzut;
}
 
void *wpisz(void *dane) {
    daneWatkow *daneRzut;
    char cyfra, cyfra2[2]; /* cyfra2 jest tablica, czyli typem char* a cyfra jest char i strcmp nie potrafi ich porownac */
    cyfra='1';
    daneRzut=(daneWatkow*) dane;
 
    while (cyfra!='0') {
        usleep(sekunda/10);
        move(9,9);
        if (cyfra = getch()) {
            cyfra2[0] = cyfra;
            cyfra2[1] = '\0';
            if (strcmp(cyfra2, daneRzut->liczba)==0) {
                pthread_cancel(daneRzut->watek1);
                daneRzut->stan = 1;
                break;
            }
            mvprintw(8,8,"You typed, while in game: %c!", cyfra);
            move(9,10);
            clrtobot();
            move(9,9);
            refresh();
        }
    }
    return (void*) daneRzut;
}
 
| sklep zoologiczny | | seksowne majtki | | Kredyty mieszkaniowe | | Programista Trójmiasto | | Skracacz linków | | Darmowe Blogi | | Skracacz adresów | | Darmowe Ebooki | | Opisy na Facebooka |