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.

programowanie cpp opznienia czasowe

kapidt 16 Lut 2013 15:30 1068 10
  • #1 16 Lut 2013 15:30
    kapidt
    Poziom 8  

    Witam, potrzebuje wprowadzić opóźnienie czasowe w pętli, powiedzmy 3 sekundy na cykl, jakiej użyć funkcji i jakiej biblioteki? najlepiej jakaś biblioteka podstawowa, wbudowana w większość kompilatorów bo piszę pod QNX'em na wirtualna maszynę i boję się że będzie ciężko coś dograć

    Dodano po 1 [godziny] 9 [minuty]:

    widzę, że wyświetlenia są, ale odpowiedzi brak;/ wiec może czy są takie funkcje w bibliotece <time.h>? ewentualnie jak one działają?

    0 10
  • Pomocny post
    #2 16 Lut 2013 16:00
    mickpr
    Poziom 39  

    1. Odczytaj czas (time_t)
    2. Dodaj do niego okres który chcesz "poczekać", zapisz w zmiennej.
    3. Odczytuj w pętli czas (time_t) sprawdzaj z zapisaną wartością, czy czas już upłynął.

    Trudne?

    Jeśli chciałbyś nie blokować procesora trzeba - wejść w np. w wątki.

    0
  • #3 16 Lut 2013 17:49
    kapidt
    Poziom 8  

    no wlasnie myslalem ze jest prostsza funkcja jak np. w SDL zwykly delay, a co do watkow to walsnie chce ich uniknac:) czy to jest jedyny sposob? czy sa prostsze, bo nie chce rozbudowywac bezsensownie kodu jezeli mozna by te petle zastapic jedna linijka

    Dodano po 1 [godziny] 4 [minuty]:

    a mozna wprowadzic jeden watek a reszta czesc programu zeby sobie leciala czy musza byc wtedy dwa watki?

    0
  • #4 16 Lut 2013 20:45
    mickpr
    Poziom 39  

    kapidt napisał:
    a mozna wprowadzic jeden watek a reszta czesc programu zeby sobie leciala czy musza byc wtedy dwa watki?
    Wątek to odgałęzienie programu, który działa niezależnie od rodzica (który stworzył wątek).
    Komunikacja między wątkami.. i inne sprawy... to szeroki temat.
    Jeśli programowanie tyczy mikrokontrolera - wykorzystaj timer.

    0
  • #5 16 Lut 2013 21:20
    kapidt
    Poziom 8  

    no wlasnie nie, robie symulator skrzyzowania i chce wprowadzic opoznienie w petli sterujacej sygnalizatorami, ale jezeli wprowadze tam opoznienie (np dla zielonego swietla), to jednoczesnie zatrzymam ruch samochodow, bo pozostale pete tez sie zatrzymaja. nie chce wprowadzac watkow poniewaz trzeba byloby zrobic dwa i komunikowac je przez mutexy (o ile sie nie myle), a jeszcze tego nie robilem nigdy i nie wiem czy bede potrafil to zrobic w miare szybko, wiec czy moze znasz jakis sposob na ominiecie tej blokady?

    0
  • #6 16 Lut 2013 22:10
    mickpr
    Poziom 39  

    Jest.
    Robisz pętle...w niej zmienne i cała aplikacja w postaci jak najkrótszych działających procedurek (w stylu włącz światło, wyłącz światło).
    Poczytaj o maszynie stanów... to rozwiąże twój problem.
    Tu jest dobry artykuł http://ep.com.pl/files/1436.pdf

    0
  • #7 16 Lut 2013 22:11
    kapidt
    Poziom 8  

    w takim razie ostatnie pytanie:) czy takie rozwiazanie bez watkow, uda sie podciagnac pod programowanie czasu rzeczywistego? czy watki sa niezbedne? zadanie z gory narzuca jezyk c/cpp wiec nie moge uzywac np. ady

    0
  • #8 16 Lut 2013 22:13
    mickpr
    Poziom 39  

    kapidt napisał:
    w takim razie ostatnie pytanie:) czy takie rozwiazanie bez watkow, uda sie podciagnac pod programowanie czasu rzeczywistego?
    Nie rozumiem pytania... sformułuj je inaczej.
    Wiem co to system czasu rzeczywistego (używałem RTLinux'a, używam FreeRTOS'a).
    Co chcesz zrobić?

    0
  • #9 16 Lut 2013 22:16
    kapidt
    Poziom 8  

    to co tworze to jest projekt zaliczeniowy z przedmiotu "programowanie systemow czasu rzeczywistego". srodowisko w ktorym programujmy to QNX momnetics i programujemy w c lub cpp. uzycie watkow jest idealnym rozwiazaniem dla takiego systemu, a to obejscie watkow w tej petli tak srednio mi pasuje. czy moze sie myle?

    a dokladnie chce zrobic symulator skrzyzowania. samochody poruszaja sie po tablicy, sa swiatla ktore puszczaja ruch poziomo lub pionowo, do tego grafika w java'ie. program wykonuje sie na wirtualnej maszynie i przesyla dane przez ethernet do gui w javie lecacego w moim przypadku pod windowsem (wiem ze to nie jest najlepszy system do programowania:))

    0
  • #10 16 Lut 2013 22:40
    mickpr
    Poziom 39  

    Skoro wątki i ich wzajemna synchronizacja. to już ci nie pomogę... to wymaga obeznania w systemu, w którym piszesz - QNX.
    Nie wiem tylko - czemu to ma być system czasu rzeczywistego? Do sterowania światłami?
    Przecież to pójdzie nawet pod DOS'em, bez całego tego zgiełku "RealTime" w sposób pokazany w linku.

    Opracuj sobie strukturę danych opisujących skrzyżowanie, żebyś zawsze mógł się odwołać do stanu "systemu" w danej chwili. Potem w wątkach zmieniaj stan sygnalizacji, a w programie głównym kolejne generowane samochodziki z ich ruchem... uzależnione znów tylko od stanu systemu (sygnalizacji).
    Da się zrobić... małymi krokami - inaczej się zgubisz.

    0
  • #11 16 Lut 2013 22:51
    kapidt
    Poziom 8  

    ok. a real time jest bo byc musi, zly temat sobie troche wybralem, myslalem ze latwiej pojdzie i teraz na sile troche staram sie to komplikwoac zeby spelnic wymogi... troche zawalilem ale jestem sam sobie winien. btw, dzieki za pomoc i uzyteczne rady i zycze milego wieczoru, jeszcze raz dzieki

    0