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 1411 10.12.2019, 17:58
Ostatni post: rafal12999
  [SQL]procedura zliczania czasu CTRL85 0 10256 17.02.2018, 12:58
Ostatni post: CTRL85
  Sumowanie czasu excel. Cixi 7 10459 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
  Klasa wewnętrzna w C++ Physicist 4 8530 23.03.2019 18:28
Ostatni post: Physicist
  Ruby on Rails - tutoriale luciussulla 0 7649 23.03.2019 16:49
Ostatni post: luciussulla
Big Grin Czy dostane sie technikum informatycznego klaudiusz20046 6 10987 21.03.2019 01:28
Ostatni post: UnableToSee
  [C#] Program do moderacji czatów gier wiktrom12 0 8113 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 8566 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 9994 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 8863 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 9618 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 8922 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 9625 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 12269 19.12.2018 16:29
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 10066 07.11.2018 13:41
Ostatni post: Ajgor
Scared Ipad Pro programowanie? NissmoOne 4 11217 06.10.2018 12:22
Ostatni post: NissmoOne
  C# pierwsza pusta komórka Excel DonCorleone 0 10124 21.09.2018 16:58
Ostatni post: DonCorleone
  .bat nie kompresuje plików GIENTY 3 10634 06.09.2018 07:20
Ostatni post: broda99