Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - [pthread.h] Wczytywanie znaku w tle, bez zatrzymywania main()

klawiszu 30 Mar 2013 19:36 1332 3
  • #1 30 Mar 2013 19:36
    klawiszu
    Poziom 9  

    Witam, mam za zadanie stworzyć coś w stylu przełącznika, do już gotowego programu. Program po odpaleniu (mojej konstrukcji) ustawiamy zmienną typu char na '0', i rozpoczynamy wykonywanie programu w pętli nieskonczonej.

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Mniej wiecej tak to wyglada. No i pod linuxem (g++) tworzę nowy wątek, w wątku próbuje zmienić zmienną ch, jednak z nowego watku nie moge zwrócić wartości innej niz void. Dlaczego?

    0 3
  • #2 10 Kwi 2013 02:59
    gitara61
    Poziom 10  

    Trochę zagmatwanie opisane, ale z tego co rozumiem próbujesz manipulować zmienną jednego wątku z poziomu innego wątku. Z tego co pamiętam to tak się chyba nie da. Bo wątki nie mogą sobie wzajemnie mieszać w swoich zmiennych lokalnych. Wynika to z tego, że wątki są tak jakby osobnymi programami.
    Aby to obejść musisz stworzyć specjalną zmienną globalną, którą będą współdzielić wszystkie wątki. Wiąże się z tym powstawanie konfliktów, np. jeden wątek próbuje odczytać dane ze zmiennej a drugi w tym samym czasie coś do niej zapisuje. W efekcie jeden z wątków ma przestarzałe dane i powstają błędy. Są na to rozwiązania. Poczytaj o semaforach, mutexach i monitorach (chociaż nie jestem pewny czy w wątkach pozixowych istnieją te ostatnie).

    0
  • #3 10 Kwi 2013 13:10
    przemko07
    Poziom 16  

    heh, Snake na tym napisałem :P

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    działa to w taki sposób ze kbhit zwraca 1 jeśli jakiś są jakieś dane w buforze klawiatury, czy może nawet wyżej.
    natomiast getch będzie pobierało 1 bajt z tego bufora, nie wszystkie klawisze mieszczą się w 1 bajcie, dlatego wpisałem 2 x kbhit i 2 x getch, dla przykładu strzałki maja 2 bajty, oczywiście można to zrobić na 1 bajcie ze strzałkami. wtedy strzałka w gore ma chyba kod 77, a to jest równoznaczne "M" dlatego będzie można na 2 sposoby sterować :P
    żadnych watkow nie trzeba, ten sposob jest nawet jak dla mnie szbszy

    0
  • #4 10 Kwi 2013 14:26
    stanleysts
    Poziom 27  

    W ogóle to do komunikacji między wątkami korzysta się ze specjalnych mechanizmów a nie tak, że kończysz jakiś wątek i z niego coś zwracasz do innego, to jest bez sensu.

    0