c ++ - Hold rullebjælken fryser win32 konsol applikation

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skrev dette lille program for at illustrere mit problem:


int main(int argc, char* argv[])
{
   int i = 0;
   while(1)
   {
       std::cout << i++ << std::endl;
       Sleep(1000);
   }
    return 0;
}


Så dette enkle program vil stoppe med at tælle, hvis du holder den lodrette rullepanel (for at se tilbage logfiler eller uanset ...).


Er der en måde at undgå dette på?


Skål

Bedste reference


Ikke rigtig. Hvad der sker er, at at holde rullebjælken forhindrer programmet til at skrive noget nyt output til konsollen, så det til sidst blokerer for spyling af std :: cout. Dette skyldes, hvordan Windows implementerer konsollen og ikke kan undgås.

Andre referencer 1


Hvis du ikke kan stole på den fortsatte udførelse af programmet, kan du i stedet beregne i baseret på den tid der er gået fra det oprindelige program:


#include <ctime>

time\_t initialSeconds;

int main(int argc, char* argv[])
{
  double i=0;

  //Initialise time
  initialSeconds = time (NULL);

  while(1) {
    i = difftime(initialSeconds, time(NULL));
    sleep(1000);
  }
}


Dette vil beregne antallet af sekunder, der er gået ud fra computerens ur.


(Haven har ikke testet dette som jeg ikke er på en maskine med en compiler)