schleife bis.... keypressed?



  • hallo,
    ich habe zwei verschachtelte schleifen, die so lange laufen sollen, bis ein abbruch gewünscht ist.

    for(int b =1;b<100;b++){
    
    for(int a =1;a<100;a++){
    
    getkey= abbruch?
    mache was aufwendiges...
    }
    getkey= abbruch?
    
    }
    

    wie kann ich an dieser stelle abbrechen?
    kann ich die erste for schleife eigentlich irgendwie in eine endlosschleife umwandeln so dass es vernünftiger C++ Code ist?



  • 1. Schleifen in ein Thread auslagern (boost.thread)
    2. per cin warten, bis etwas (bestimmtes) eingegeben wird
    3. Thread mitteilen, dass er sich beenden soll

    //typo



  • Endlosschleife:

    1:

    for(;;){...}
    

    2:

    while(1){...}
    

    Ansonsten. Was brauchst du als Abbruchbedingung?



  • Wenn es nicht ganz so portabel sein muss und ein wenig Microsoft spezifisch sein darf, dann kannst du auch das _kbhit() Ding benutzen.
    Wenn allerdings dein 'mache was aufwendiges' zu aufwendig ist, kommst du um einen Thread nicht herum.

    void aufwendig()
    {
    	return;	// Hier nicht ganz so aufwendig. 
    }
    
    int main()
    {
    	bool Run = true;
    	int c = 0;
    	while (Run)
    	{
    		while(!_kbhit() )
    		{
    			printf("Running          \r");
    			aufwendig();
    		}
    
    		if ( (c = _getch()) == 'q' ) 
    		{
    			while( c != 'y' && c != 'n' )
    			{
    				printf("Realy quit? [y/n]\r");
    				c = _getch();			
    			}
    
    			if ( c == 'y' ) Run = false; 
    		}
    	}
    	puts("\nAdios!");
     	return 0;
    }
    


  • hey,
    welche includ dateien benöigt man um diese funktion durchzuführen?

    _getch() ist unbekannt...

    aber vielleicht ist eine thread methode doch besser...



  • dr.nobody schrieb:

    hey,
    welche includ dateien benöigt man um diese funktion durchzuführen?
    _getch() ist unbekannt...

    _getch und _kbhit sind bei mir in der conio.h


Anmelden zum Antworten