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

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

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

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

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å
×
×
  • Opprett ny...