Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: C++, problém s výstupom za použitia ctime [vyřešeno]  (Přečteno 2001 krát)

YaD

  • Návštěvník
  • Příspěvků: 69
Spravil som si jednoduchý kód, ktorý ráta bodky a potom ich zmaže. Vo win to funguje podľa očakávania, ale na Ubuntu 10.04 má problémy s výstupom. Kód začne pracovať a po malom momente sa vypíše celý výstup, resp. za behu nič nevypíše (čo by mal).

Kód: [Vybrat]
#include <iostream>
#include <ctime>

void zmazBodky()
{
    std::cout << "\b\b\b   \b\b\b";
}

void pockajSekundu()
{
    clock_t cakaj = 1 * CLOCKS_PER_SEC;
    clock_t start = clock();
    while(clock() < cakaj + start)
        ;
}

void bodky()
{
    for(int i = 0; i <= 2; i++)
    {
        pockajSekundu();
        std::cout << ".";
    }
}

int main(int argc, char* argv[])
{
    std::cout << "Ahoj";

    for(int i = 0; i <= 2; i++)
    {
        bodky();
        pockajSekundu();
        if(!(i==2))
            zmazBodky();
    }

    std::cout << std::endl << "Pre ukoncienie stlace enter";
    std::cin.get();

    return 0;

}

Rád by som Vás poprosil o radu kde je chyba. Ďakujem.

P.S.
Možno to pomôže:
Kód: [Vybrat]
g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
« Poslední změna: 10 Října 2010, 15:46:56 od Premet »

mka

  • Závislák
  • ***
  • Příspěvků: 1907
  • Chybovat je moje.
    • Příložany Cé Zet
Re: C++, problém s výstupom za použitia ctime
« Odpověď #1 kdy: 10 Října 2010, 12:53:13 »
Co takhle vynutit výstup použitím flush? Viz. např. http://www.cplusplus.com/reference/iostream/ostream/flush/

petergula

  • Stálý člen
  • **
  • Příspěvků: 1016
Re: C++, problém s výstupom za použitia ctime
« Odpověď #2 kdy: 10 Října 2010, 14:11:12 »
Len fakticka, co tak pouzivat sleep miesto brutalneho checkovania v prazdnom cykle? http://linux.die.net/man/3/sleep
ntbk Dell 6420 (Amd Ati, Intel i7, 4GB RAM, 256GB SSD ...)
secondary/u svokrovcov:
Xubuntu (64bit) ntbk Asus A6Je (Ati X1450, Intel Core2Duo T5500, 2.5GB RAM ...)

mka

  • Závislák
  • ***
  • Příspěvků: 1907
  • Chybovat je moje.
    • Příložany Cé Zet
Re: C++, problém s výstupom za použitia ctime
« Odpověď #3 kdy: 10 Října 2010, 14:26:31 »
Len fakticka, co tak pouzivat sleep miesto brutalneho checkovania v prazdnom cykle? http://linux.die.net/man/3/sleep
Jo, je to sice trochu OT, ale souhlas. A krom sleepu tu máme ještě usleep :-)

YaD

  • Návštěvník
  • Příspěvků: 69
Re: C++, problém s výstupom za použitia ctime
« Odpověď #4 kdy: 10 Října 2010, 14:27:56 »
To mka: Pokiaľ správne rozumiem, tak by mal flush, vždy vypísať obsah bufferu, resp. obsah toho súboru. Pokiaľ je to tak, mám niekde problém, kedže mi to nedáva žiadny výstup okrem toho súboru, ktorý musím čítať ručne ($ cat test.txt).

To petergula: Díky za radu. :) V C++ začínam, takže nemám taký rozhľad.

mka

  • Závislák
  • ***
  • Příspěvků: 1907
  • Chybovat je moje.
    • Příložany Cé Zet
Re: C++, problém s výstupom za použitia ctime
« Odpověď #5 kdy: 10 Října 2010, 15:12:06 »
Pokud chceš okamžitě zobrazit výstup. tak po každém výstupu musíš použít flush. Jinak se výstup realizuje buď po zaplnění výst. bufferu nebo po ukončení řádku nebo např. programu.

YaD

  • Návštěvník
  • Příspěvků: 69
Re: C++, problém s výstupom za použitia ctime
« Odpověď #6 kdy: 10 Října 2010, 15:35:43 »
Díky! Funguje to.

K+

Martin - ViPEr*CZ*

Re: C++, problém s výstupom za použitia ctime
« Odpověď #7 kdy: 10 Října 2010, 15:39:56 »
Zajmavý je, že zrovna na stránkách co poslal mka ohledně metody flush... je ona ctime třída... kde zrovna uvádějí právě jako sample onen while cyklus:

http://www.cplusplus.com/reference/clibrary/ctime/clock/

PS:

Kód: [Vybrat]
std::cout << "Ahoj";Toto nepoužívejte... dejte si pod includy řádek:

Kód: [Vybrat]
using namespace std;
a všude pak můžete std:: vynechat

Dále pak třeba toto:

Kód: [Vybrat]
if(!(i==2))
Doporučuji psát takto:

Kód: [Vybrat]
if ( i != 2 )
Open source is gold way... Mint 17.2, Debian 8.1 Jessie| Ubuntu Wiki (návody) | Google vyhledávač | Qt4 návody

mka

  • Závislák
  • ***
  • Příspěvků: 1907
  • Chybovat je moje.
    • Příložany Cé Zet
Re: C++, problém s výstupom za použitia ctime
« Odpověď #8 kdy: 10 Října 2010, 16:27:53 »
Kód: [Vybrat]
[quote author=Martin - ViPEr*CZ* link=topic=50818.msg366252#msg366252 date=1286717996]
Zajmavý je, že zrovna na stránkách co poslal mka ohledně metody flush... je ona ctime třída... kde zrovna uvádějí právě jako sample onen while cyklus:

http://www.cplusplus.com/reference/clibrary/ctime/clock/
( i != 2 )
[/quote]

Jojo, jako ilustrační příklad je to nepochybně dobrý. Ale pro běžnou praxi jsou sleep a usleep zřejmě mnohem vhodnější :-)

P.S.
Krom toho to s tím CLOCKS_PER_SEC není až zase tak jednoznačný, viz man clock(3):
Citace
CONFORMING TO
       C89,  C99,  POSIX.1-2001.   POSIX  requires  that CLOCKS_PER_SEC equals 1000000 independent of the actual resolution.
« Poslední změna: 10 Října 2010, 16:35:31 od mka »

YaD

  • Návštěvník
  • Příspěvků: 69
Re: C++, problém s výstupom za použitia ctime [vyřešeno]
« Odpověď #9 kdy: 10 Října 2010, 19:48:20 »
To Martin - ViPEr*CZ*:
To std:: používam skôr pre prehľadnosť, aby som vedel, kde je aký kód, či môj alebo z knižníc (C++, kedže C nemá takéto prefixy, myslím...).
EDIT: Keď už, tak používam skôr using std::cout a pod. ;)
To !(i == 2) je už zlozvyk, aj keď viem, že používať i != 2 by bolo lepšie.
   ---   ---   ---   ---
Ešte k tomu unistd.h, tu budem mať trošku problém, kedže testujem programy pod win v MS VS C++ 2010 Express. Ale s tým sa pohrám asi v minGW alebo tu knižnicu nejako prilinkujem.
« Poslední změna: 10 Října 2010, 20:01:17 od YaD »

Firzen

  • Stálý člen
  • **
  • Příspěvků: 1287
    • Beroot
Re: C++, problém s výstupom za použitia ctime [vyřešeno]
« Odpověď #10 kdy: 10 Října 2010, 20:13:33 »
CLOCK_PER_SECS funguje ve Windows i v Linuxu ale vytěžuje to procesor. Sleep ho nevytěžuje, ale ve Windows to nefunguje.
AMD Phenom II X6 1100T@3,3GHz, Gigabyte GeForce GT 430 1GiB, 8GiB RAM, 1TiB SATA3 HDD, Nokia N900
OS: Debian 6.0 Squeeze, Maemo 5
Citace
Prosintě ty jsi takový zkušený vývojář - co mám dělat, když nevím, jako něco udělat? :D

YaD

  • Návštěvník
  • Příspěvků: 69
Re: C++, problém s výstupom za použitia ctime [vyřešeno]
« Odpověď #11 kdy: 10 Října 2010, 21:08:24 »
To ma trošku štve, kedže pridať tam knižnice je dosť problematické, závislosti sú ako reťaz a minGW ju v sebe nemá. Takže prenositeľnosť kódu je vážne problém. Preto by som sa rád spýtal či existuje nejaké kompilátor s knižnicami pre obidve platformy?
g++, integrovaný vo VS, minGW majú rozdielne knižnice.

mka

  • Závislák
  • ***
  • Příspěvků: 1907
  • Chybovat je moje.
    • Příložany Cé Zet
Re: C++, problém s výstupom za použitia ctime [vyřešeno]
« Odpověď #12 kdy: 10 Října 2010, 23:03:44 »
CLOCK_PER_SECS funguje ve Windows i v Linuxu ale vytěžuje to procesor. Sleep ho nevytěžuje, ale ve Windows to nefunguje.
Ono ve widlích něco funguje?

 

Provoz zaštiťuje spolek OpenAlt.