Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[C++] Upływ czasu rzeczywistego

#1
[C++] Upływ czasu rzeczywistego
Witam, mam pewien problem z którym nie jestem sobie w stanie poradzić. Czerwony

Otóż chodzi o to, że piszę program (konsola) w którym ważne jest to, że tak jakby "w tle" całego programu dzieje się jakaś funkcja, która co 4 minuty czasu, który użytkownik spędza w programie wywołuje jakąś funkcję (funkcje będą 2, będą one zmieniać po prostu jedną zmienną (a może więcej). Gdy jedna zadziała, to po 4 minutach uruchomi się druga i tak dalej )
Dodatkowo chciałbym, aby np. w 3 minucie i 50 sekundzie wyświetlił się odpowiedni komunikat o zbliżającym się wywołaniu tamtej funkcji (będę chciał tam wpisać coś innego, ale tak łatwiej przedstawić).

Czy miałby ktoś pomysł jak to zrobić? Program jest tworzony obiektowo, kodu nie zapodam, ponieważ jestem na etapie projektowania, a nie kodowania.

Kłopot polega na tym, że cały program dzieje się w pętli, a ta funkcja obliczając czas działała by zawsze, nie ma znaczenia czy użytkownik już z pętli wyszedł, czy przeskoczył do jakiejś funkcji.

Będę bardzo wdzięczny za jakąkolwiek pomoc Wesoły
 System operacyjny: windows_seven Przeglądarka: chrome
#2
RE: [C++] Upływ czasu rzeczywistego
Sądzę, że w tym wypadku warto zastanowić się nad wykorzystaniem współbieżności. Jakaś akacja ma być wywoływana co 4 minuty - co 4 minuty budzisz wątek i po sprawie. Inne zadanie w drugim wątku - co 3,5 minuty.
Żaden kraj nie może być dobrze rządzony, dopóki wszyscy jego obywatele nie będą pamiętać, że oni są strażnikami prawa.




 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#3
RE: [C++] Upływ czasu rzeczywistego
Poczytałem trochę o tej współbieżności, ale... nadal nie rozumiem. Język
Przede wszystkim czy chodzi o funkcję fork()? Jeżeli tak, to jak mogę nią zaoperować w taki sposób, by co 4 minuty np wywołała jakąś funkcję np. przykład(int nic); ?
 System operacyjny: windows_seven Przeglądarka: chrome
#4
RE: [C++] Upływ czasu rzeczywistego
Nie wiem czy to Linux(po fork() sądzę, że Linux) czy Windows, ale w Windowsi'e utworzyłbym wątek, wykonał go, zatrzymał, poczekał 4 minuty(Sleep) i wznowił.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#5
RE: [C++] Upływ czasu rzeczywistego
(10.05.2011, 18:40)Darekg11 napisał(a): Nie wiem czy to Linux(po fork() sądzę, że Linux) czy Windows, ale w Windowsi'e utworzyłbym wątek, wykonał go, zatrzymał, poczekał 4 minuty(Sleep) i wznowił.

Nie, Windows, szczerze powiedziawszy "wygóglowałem" sobie to, i fork() było jakoś najnormalniej opisane.
Nie mogę robić tego co ty mi radzisz, bo zatrzymało by to program na 4 minuty, a ja chcę, że nawet ta funkcja by się wykonywała gdy człek spędzi 4 minuty nic nie robiąc, lub będzie korzystał normalnie z programu.
 System operacyjny: windows_seven Przeglądarka: chrome
#6
RE: [C++] Upływ czasu rzeczywistego
(10.05.2011, 16:24)~Anonim napisał(a): Poczytałem trochę o tej współbieżności, ale... nadal nie rozumiem. Język
Przede wszystkim czy chodzi o funkcję fork()? Jeżeli tak, to jak mogę nią zaoperować w taki sposób, by co 4 minuty np wywołała jakąś funkcję np. przykład(int nic); ?
Nie stosowałem nigdy bezpośrednio funkcji fork(). Korzystałem zawsze z biblioteki zthread. Biblioteka ta udostępnia klasę Runnable z funkcją run() w której definicji umieszczasz zadanie. Następnie definiujesz obiekt klasy Thread i do konstruktora przekazujesz wskaźnik na obiekt klasy pochodnej od Runnable.
Wyglądałoby to następująco (prosty przykład może nieco pomoże):
Kod:
#include <iostream>
#include "zthread/Runnable.h"
#include <string>

class MyThread : public ZThread::Runnable
{
public:
    MyThread(std::string str) : _str(str), count(10)
    {  
    }
    void run()
    {
        while(count--)
        {
            Thread::sleep(2500);
            std::cout<< _str << "\n";
        }
    }
private:
    std::string _str;
    int count;
};

int main()
{
    MyThread* myT = new MyThread("Watek A");
    MyThread* myT2 = new MyThread("Watek b");
    MyThread* myT3 = new MyThread("Watek C");
    MyThread* separator = new MyThread("--- koniec cyklu -----");
    
    try
    {
        Zthread::Thread t1(myT);
        ZThread::Thread t2(myT2);
        ZThread::Thread t3(myT3);
        ZThread::Thread t4(separator);
    } catch (Synchronization_Exception& e);
}
Bynajmniej sleep nie zatrzymuje całego programu tylko utworzony wątek.
Tłumaczyć czym jest wątek nie będę - sprawa jest dobrze opisana w Internecie.

(10.05.2011, 18:40)Darekg11 napisał(a): Nie wiem czy to Linux(po fork() sądzę, że Linux) czy Windows, ale w Windowsi'e utworzyłbym wątek, wykonał go, zatrzymał, poczekał 4 minuty(Sleep) i wznowił.
Cóż nowego do tematu wnosi Twoja wypowiedz?
Żaden kraj nie może być dobrze rządzony, dopóki wszyscy jego obywatele nie będą pamiętać, że oni są strażnikami prawa.




 System operacyjny: linux_fedora Przeglądarka: firefox
#7
RE: [C++] Upływ czasu rzeczywistego
Dzięki wielkie za pomoc oskarzet, poczytam sobie o tym wszystkim, pokombinuję, ale jak nad czymś się "zatkam", to napiszę.
Tak czy siak dziękuję. Wesoły
 System operacyjny: windows_seven Przeglądarka: chrome
#8
RE: [C++] Upływ czasu rzeczywistego
Dla zthread dwa linki:
http://bruce-eckel.developpez.com/livres...4#L3.4.2.1
http://zthread.sourceforge.net/documentation.html
Przyjazna jest również pthread (https://computing.llnl.gov/tutorials/pthreads/ ).
Jeśli na Windows to: http://msdn.microsoft.com/en-us/library/...85%29.aspx

Ogólnie wątki nie są bardzo trudnym zagadnieniem jednak trzeba trochę pomyśleć.
Żaden kraj nie może być dobrze rządzony, dopóki wszyscy jego obywatele nie będą pamiętać, że oni są strażnikami prawa.




 System operacyjny: linux_fedora Przeglądarka: firefox
Programy: Polecane / Nowe / Inne



Użytkownicy forum szukali:
program czasu rzeczywistego c++c++ obsługa czasu rzeczywistegopetla czasu rzeczywistegopętla czasu rzeczywistego c++upływ czasu c++

Podobne wątki ([C++] Upływ czasu rzeczywistego)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [JavaScript] Znajdowanie przedziału czasu rafal12999 0 2051 10.12.2019, 17:58
Ostatni post: rafal12999
  [SQL]procedura zliczania czasu CTRL85 0 10479 17.02.2018, 12:58
Ostatni post: CTRL85
  Sumowanie czasu excel. Cixi 7 10719 13.02.2018, 11:52
Ostatni post: Cixi

Skocz do:


Wybrane wątki ([C++] Upływ czasu rzeczywistego)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
Ściana Prosta gra w Builder C++ Kiranek1 1 8481 31.05.2019 15:20
Ostatni post: Szachista
  Menu (Nie widoczne długie opisy) wanhelsing 5 10562 28.04.2019 19:31
Ostatni post: koneton
  Skrypt usuwający pliki sylwiaa1 2 4361 28.04.2019 15:20
Ostatni post: sylwiaa1
  Środowisko do assemblera Physicist 4 9808 21.04.2019 14:04
Ostatni post: Ajgor
  VBA excel dmjs 6 10004 17.04.2019 10:20
Ostatni post: ptrick
  C++ - sens pogłębiania nauki gbr 5 9733 25.03.2019 12:53
Ostatni post: koneton
  Klasa wewnętrzna w C++ Physicist 4 9404 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 8515 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 11968 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 9007 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 9455 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 10883 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 9740 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 10522 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 9753 10.01.2019 13:12
Ostatni post: jurek2