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 1379 10.12.2019, 17:58
Ostatni post: rafal12999
  [SQL]procedura zliczania czasu CTRL85 0 10246 17.02.2018, 12:58
Ostatni post: CTRL85
  Sumowanie czasu excel. Cixi 7 10443 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
  Programowanie Batch (CMD) Informatyk2019 0 3102 11.12.2019 18:30
Ostatni post: Informatyk2019
  [JavaScript] Znajdowanie przedziału czasu rafal12999 0 1379 10.12.2019 17:58
Ostatni post: rafal12999
  Przekazywanie wskaźnika przez referencję w Qt Trojan3000 3 10752 10.12.2019 13:16
Ostatni post: Ajgor
  Proszę o pomoc w uzupełnieniu ankiety dt. Zawodu Programisty MaleMonki 0 1878 17.11.2019 12:47
Ostatni post: MaleMonki
  Spring framework – jakie strony polecacie do nauki? olek23 5 5284 15.11.2019 15:57
Ostatni post: Alsenas
  Programowanie windy (problem) w C++ mysza2323 2 4107 06.11.2019 23:04
Ostatni post: mysza2323
  Programy w C ~Anonim 1 4476 22.10.2019 17:48
Ostatni post: Szachista
  Książki do nauki C# olek23 14 14875 17.10.2019 13:06
Ostatni post: Ajgor
  Wyświetlanie informacji z bazy danych na stronie www PitPlay 1 5690 16.09.2019 11:18
Ostatni post: Ajgor
  Błąd przy uruchamianiu programu w Java z wiersza poleceń Physicist 3 3613 30.08.2019 14:16
Ostatni post: Physicist
  Python z wiersza poleceń Physicist 15 16708 21.08.2019 20:14
Ostatni post: Physicist
  Transfer plików via FTP Visual Basic FireBytes 3 6699 15.08.2019 07:41
Ostatni post: Szachista
  Menu wysuwane z boku patryk67 1 6231 07.08.2019 12:43
Ostatni post: aht
  Visual Basic Excel l.całkowitą przedstawić w postaci szesnastkowej fugaz 4 8167 18.06.2019 21:36
Ostatni post: fugaz
  Nauka do Olimpiady Informatycznej? piotr0905 1 7668 08.06.2019 16:50
Ostatni post: wlisik