im Hintergrund rechnen



  • Hallo,

    ich habe ein bestehendes Programm welches im der main grob folgende Struktur hat..

    int main() {
    ...
    
    while(true) {
      cin >> keys;
      if(!cin){
    	 cin.clear();
    	 cin.ignore(100, '\n');
      }
    
      switch(keys){
       ...
       //mach was mit den keys
    
       case 999:
    
      }
    }
    

    nehmen wir mal an das Programm dient zur Kollisionsabfrage von PKW.
    Also im Menu kann dann gewählt werden

    1. Initialisieren der Strecke
    2. Positionieren der Autos
    3. Kollisionserkennung mit Auto (Baum,...)

    nehmen wir weiterhin an das 1) bis 3) implementiert ist. Allerdings werden für drei PKW die notwendigen GegnerPKW statisch positioniert. Die PKW fahren entlang ihrer definierten Route. Vorher aber wird geprüft ob es zu Kollisionen mit den PKW und den GegnerPKW kommt und dann abgebrochen.

    Die GegnerPKW sollen sich aber bewegen. D.h. nicht wie jetzt statisch positioniert werden, sondern sie sollen ihre Position verändern. Wie könnte man das umsetzten.

    Gruß
    Franky



  • Es gibt (mindestens) zwei Lösungen: eine saubere und eine nicht-standardkonforme schnelle.

    1. Die saubere benutzt einen Thread, der im Hintergrund in bestimmten Intervallen die Position der PKW aktualisiert und Benutzereingaben auswertet. Je nach Grad des Idealismus kann man das beliebig komplex machen.

    2. Du verlässt den Pfad der Tugend und benutzt kbhit() und getch(), um zu prüfen, ob der Benutzer eine Taste gedrückt hat. Diese Funktionen stehen nur für Win32 Konsolenprogramme zur Verfügung und dürften am schnellsten zu benutzen sein.



  • Hallo,

    danke für die Antwort. Ich hatte ganz vergessen, das ich das Ganze in Linux machen muß (erstmal Linux, danach dann Windows).

    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>
    
    void *print_message_function( void *ptr );
    
    main()
    {
         pthread_t thread1, thread2;
         char *ThreadMsg1 = "Hallo hier ist Thread 1";
         char *ThreadMsg2 = "Hallo hier ist Thread 2";
         int  iret1, iret2;
    
        /* Zwei Threads erzeugen, die unabhängig läufen.  */
    
         iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) ThreadMsg1);
         iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) ThreadMsg1);
    
         /* Auf die Beendigung der Threads warten */
         /* Vielleicht ein Problem, wenn der Prozess (Anwendung) sich */
         /* beendet, bevor die Threads terminieren!!!! */
         /* Vielleicht bleibt der ganze Rotz auch stehen, weil die Threads */
         /* hängen? */
    
         pthread_join( thread1, NULL);
         pthread_join( thread2, NULL); 
    
         printf("Thread 1 sagt: %d\n",iret1);
         printf("Thread 2 sagt: %d\n",iret2);
         exit(0);
    }
    
    void *print_message_function( void *ptr )
    {
         char *message;
         message = (char *) ptr;
         printf("%s \n", message);
    }
    

    Aber die Strukturen auf die ich zugreifen muß, sind Vektoren, structs,,,
    Wie funktionert das dann mit dem casts...

    Gruß
    Franky


  • Mod

    FrankTheFox schrieb:

    Hallo,
    danke für die Antwort. Ich hatte ganz vergessen, das ich das Ganze in Linux machen muß (erstmal Linux, danach dann Windows).

    Es gibt natürlich auch für Linux Konsolen Bibliotheken die der berüchtigten conio.h entsprechen. Die häufigste Wahl dafür ist ncurses.

    Aber die Strukturen auf die ich zugreifen muß, sind Vektoren, structs,,,
    Wie funktionert das dann mit dem casts...

    Wie funktioniert was mit Casts? Und was hast du für ein Problem mit Vectoren und Structs in Zusammenhang mit Threads? Bitte präzisere Fragen.


Anmelden zum Antworten