Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zatrzymanie czasu

Ostatnio zmodyfikowano 2020-05-14 21:24
Autor Wiadomość
aspartam
Temat założony przez niniejszego użytkownika
» 2020-05-12 20:13:30
Widzę teraz różnicę czasu i się oficjalnie poddaje, nie ma sensu dłużej tego robić, skoro każdy stara się pomóc a ja i tak nic nie rozumiem. Nie dostanę zaliczenia i tyle. Ta biblioteka nie chce działać, pojawia się komunikat, że w ogóle nie ma czegoś takiego. I jak ja chcę to zatrzymać, skoro to nawet poprawnie czasu nie odlicza, załamka i tyle.
P-176867
pekfos
» 2020-05-12 22:47:45
Nieblokujące wejście z konsoli nie jest przenośne, podając New Curses zakładam że piszesz pod Linuksa (clear nie jest windowsowym poleceniem). Być może musisz to doinstalować. Pod Windowsem byłoby prościej.
https://stackoverflow.com​/questions/448944​/c-non-blocking-keyboard-input
Przenośnym rozwiązaniem byłoby użycie wątków. Do użycia standardowych dobrze by było mieć kompilator który nie nazywa standardu z 2011 "eksperymentalnym", chociaż pewnie wszystko zadziała jak dodasz opcję kompilatora -std=c++11, tak jak ci polecił błąd kompilacji. Wystarczyłoby uruchomić timer() w osobnym wątku i użyć std::atomic_bool do komunikacji.
P-176871
aspartam
Temat założony przez niniejszego użytkownika
» 2020-05-13 13:20:34
Używam windowsa i pewnie jakąś starszą wersję kompilatora i dlatego to nie działa, a nawet jakby te wątki działały, to nie wiem w którym miejscu ich użyć, ani gdzie wkleić te poprawkę błędu.
To "clear" też mi nie pasuje, ale wtedy ładnie wszystko widać na środku i jakoś to wygląda (szkoda, że się spóźnia:)).
Odsyłam takie i modle się o 3
P-176874
pekfos
» 2020-05-13 16:36:46
Używam windowsa
Pod Windowsem możesz użyć kbhit() z <conio.h>. Wszystko powinno być dostarczone razem z kompilatorem.
C/C++
while( !kbhit() )
{
    //
}
P-176878
aspartam
Temat założony przez niniejszego użytkownika
» 2020-05-14 14:08:25
Czy teraz czas odlicza się dobrze? Udało mi się też (mam nadzieje, że poprawnie) zmienić to system clear i wygląda to dużo ładniej. Jednak, kiedy próbuję użyć funkcji do zatrzymania, nie działa to poprawnie, dlaczego?

#include <iomanip>
#include <iostream>
#include <stdlib.h>
#include <unistd.h>
#include <ctime>
#include <cstdlib>
#include <conio.h>
using namespace std;

int hours = 0;
int minutes = 0;
int seconds = 0;

void displayClock()
{
 
    void clear_screen()
    ;std::system("cls");


 
    cout << setfill( ' ' ) << setw( 55 ) << "         STOPER         \n";
    cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n";
    cout << setfill( ' ' ) << setw( 29 );
    cout << "| " << setfill( '0' ) << setw( 2 ) << hours << " hrs | ";
    cout << setfill( '0' ) << setw( 2 ) << minutes << " min | ";
    cout << setfill( '0' ) << setw( 2 ) << seconds << " sec |" << endl;
    cout << setfill( ' ' ) << setw( 55 ) << " --------------------------\n";
}

void timer()
{
   
 
    while( true ) {
      time_t sekundy = time( 0 );
        displayClock();
       
        sleep( 1 );
     
        seconds++;
      
     
        if( seconds == 60 ) {
         
         
            minutes++;
         
         
            if( minutes == 60 ) {
             
             
                hours++;
                minutes = 0;
            }
            seconds = 0;
        }
    }
}


int main()
{
 
    timer();
    {


            if(kbhit()){
            auto got=getch();
            if(got=='p'||got=='P'){
                cout<<"PAUSED, R to resume.\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
                do auto got=getch(); while(got!='r'&&got!='R');
}
}
}
    return 0;
}
P-176881
pekfos
» 2020-05-14 15:14:02
Czy teraz czas odlicza się dobrze?
Nic się w kodzie nie zmieniło.
P-176882
aspartam
Temat założony przez niniejszego użytkownika
» 2020-05-14 17:09:07
A teraz jest okej? Może mogę coś usunąć, bo wydaje mi się, że są tu dwa kody na raz i jakoś to działa

void timer()
{
   
  clock_t startTime = clock();
    while( true ) {
    sleep (1)
    ;clock_t secElapsed = (clock() - startTime) / CLOCKS_PER_SEC;
    cout << secElapsed;
      time_t sekundy = time( 0 );
        displayClock();
     
        seconds++;
      
     
        if( seconds == 60 ) {
         
         
            minutes++;
         
         
            if( minutes == 60 ) {
             
             
                hours++;
                minutes = 0;
            }
            seconds = 0;
        }
    }
}
P-176884
pekfos
» 2020-05-14 20:55:58
Teraz masz 3 kody na raz i dalej nic się w kodzie nie zmieniło. Dalej czas bierzesz w tej samej błędnej implementacji, która działa tym błędniej, im więcej kodu dopiszesz.
C/C++
seconds++;


if( seconds == 60 ) {
   
   
    minutes++;
   
   
    if( minutes == 60 ) {
       
       
        hours++;
        minutes = 0;
    }
    seconds = 0;
}
To jest do usunięcia. Dostałeś już kod który liczy czas poprawnie, wystarczy tamten wynik rozdzielić na sekundy, minuty i godziny.
P-176886
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona