Robie programik w C (a w zasadzie małą grę) na zaliczenie w ncurses i stanąłem przed pewnym problemem. Mianowicie potrzebuje pobrać za pomocą funkcji scanw (choć może być też inna, to nie ma znaczenia) od użytkownika numer pola, które następnie ma być zaznaczone w grze. Gracz ma mieć na to powiedzmy 5 sekund, po upływie których wykona się jakiś losowy ruch. Próbowałem stworzyć drugi wątek za pomocą pthread i w ramach nauki napisałem program i oto, co mi wyszło:

#include <curses.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define sekunda 1000000

void *stoper(void *czas);
void *wpisz(void *stan);
int main() {
    pthread_t watek1,watek2;
    float *czasPrzekazywany;
    int *stanPrzekazywany;


    czasPrzekazywany = (float*) malloc(sizeof(float));
    *czasPrzekazywany=5;
    stanPrzekazywany = (int*) malloc(sizeof(int));
    *stanPrzekazywany=0;
    initscr();
    curs_set(1);
    pthread_create(&watek1, NULL, stoper, (void*) czasPrzekazywany);
    pthread_create(&watek2, NULL, wpisz, (void*) stanPrzekazywany);
    getch();
    pthread_join( watek1, NULL);
    pthread_join( watek2, NULL);
    endwin();
    free(czasPrzekazywany);
    free(stanPrzekazywany);
    return 0;
}

void *stoper(void *czas) {
    float *czasRzut, i;
    czasRzut=(float*) czas;

    for (i=0; i<=10*(*czasRzut); i++) {
        mvprintw(5,5,"%.1f",(*czasRzut)-i*0.1);
        refresh();
        usleep(sekunda/10);


    }
    mvprintw(5,5,"0.0");
    refresh();
    return (void*) czas;
}

void *wpisz(void *stan) {
    int stanRzut,cyfra;
    stanRzut=(int*) stan;
    mvscanw(6,5,"%d",&cyfra);
    if (cyfra == 6) {
        mvprintw(8,8,"NACISNIETO 6");
        refresh();
    }

    stan=(void*) stanRzut;
    return (void*) stan;
}

Niby wszystko działa, jednak problem polega na tym, że gdy pierwszy wątek realizuje odliczanie co 1/10 sekundy, przenoszony jest kursor w tamto miejsce. Jeżeli mam szczęście, to czasem program zarejestruje naciśnięty klawisz, jednak w większości przypadków to po prostu nie działa, bo kursor jest zaraz za cyframi stopera zamiast w miejscu scanfa. Można coś poradzić na to? Możliwe, że podział na wątki nie jest tu dobrym pomysłem i idzie to zrealizować inaczej; ja jestem dopiero początkującym programistą i to pierwsze co wpadło mi do głowy.

Pozdrawiam serdecznie!