Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

Videoannonse
Annonse

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
Lenke til kommentar

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.

Lenke til kommentar
  • 7 måneder senere...

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
Lenke til kommentar

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
Lenke til kommentar

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
Lenke til kommentar

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...