Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

Skrevet

Ja. Det merket jeg i sted. Synes det er ganske merkelig dog.. Hvis den først greier å differensiere mellom 415 002 540 ns og 415 020 470 ns, synes jeg det er rart at den ikke kan måle et tidsrom på f.eks. differansen mellom disse, 17 930 ns.

Videoannonse
Annonse
Skrevet

Det er en rekke uforutsigbare ting som f.eks. task switching og cpu-frekvens som kommer inn i bildet. Om cpu-en er i hvilemodus tar det litt tid på maks last før den våkner.

I tillegg er ikke granulariteten nødvendigvis så god som APIene kan gi inntrykk av. F.eks. har vanlig GetTickCount() på windows offisielt millisekund-oppløsning, men i realiteten måler den ikke kortere tidsrom enn 16 ms dersom man ikke har stilt opp oppløsningen med spesialfunksjoner først.

 

Tilsvarende blir det med nanosekund-funksjoner - de måler ikke ett og ett nanosekund.

 

18000 nanosekunder er så kort at jeg tviler på at PCen har fysisk mulighet til å måle noe mye kortere - i hvert fall kan selve målingen ta lengre tid å utføre enn programsnutten din.

  • Liker 1
Skrevet

Bare som en sidenotis; presis måling av tid er vanskelig uten et operativsystem med høypresisjons timing. Derfor har jeg brukt low-latency Linux til det formålet, som gir presisjon ned på mikrosekunder i stedet for mange millisekunder.

Skrevet

Jeg skrev samme kode i to språk og ville se hvilken som gikk fortest. Koden gikk mye raskere enn jeg hadde trodd, og da den vanlige tidtakingsmåten min ikke funket (fikk 0 s) , prøvde jeg å lete etter noe som var mer presist, og da kom jeg over chronos med nanosekunder. Det endte med at jeg målte tidsbruken når jeg kjørte koden mange ganger.

  • 7 måneder senere...
Skrevet (endret)

Heisann, har jobbet i hele dag med å finne en løsning på følgende problem:

 

Ønsker å kjøre noen kodelinjer første gang jeg lager et objekt fra klassen Class

 

Pseudokode:

Class
{
    Class();
    static bool instantiated;
}

Class::Class()
{
    if( !instantiated)
    {
          // do something

    }else{
          // do something else
        instantiated = true;
    {
    
}

Som jo ikke fungerer, da variabelen 'instantiated' ikke er tilordnet en verdi..

Endret av Garanti
Skrevet (endret)

Hvis du skal ha en static variabel i en klasse må den initialiseres utenfor klassen slik:

// *.h

class A
{
public:
    A();
    static bool initialized;
};



// *.cpp

bool A::init = false;

A::A()
{
    if (initialized)
    {
        std::cout << "Initialized.\n";
    }

    // ...
}
Endret av Glutar
  • Liker 1
Skrevet

Heisann, har jobbet i hele dag med å finne en løsning på følgende problem:

 

Ønsker å kjøre noen kodelinjer første gang jeg lager et objekt fra klassen Class

Det ønsker du antagelig ikke. Hvorfor?

 

Et static member i klassen -eller- en static bool i constructoren (hvis bare én) er uansett løsningen.

  • Liker 1

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...