vrijdag 20 januari 2023

ADSN [ 115 : Multithreading met RPI ]

Volop terug in de software.

Mijn rotorbesturing werkt tot volle tevredenheid, maar er zijn nog twee probleemkes die ik opgelost wil zien :

1. De afhandeling van de TCP  verbinding bij afsluiten .

2. Tijdens de rotorsturing kan ik niet de actuele positie terugsturen via TCP , dit komt omdat alles zich maar in één draadje ( thread) afspeelt , namelijk in de main.

Dus , ik ben nu aan de studie voor multithreading onder C . 

Dit lukt aardig op mijn Intel/AMD machine voor een simpel programmaatje  maar de RPI heeft een ARM processor en ik wist niet of er een library is voor die processor.

Na wat gezoek ( er is niet zoveel te vinden over multithreading met de RPI 4)

heb ik gevonden welke lib ik moet installeren in de RPI: 


sudo apt-get install libpthread-stubs0-dev
 
Dankzij :https://gist.github.com/pvrego/7fd2610d0bf5ca063e63db6ab776e89c 
 
 

Wat ge dan nog moet doen , is bij het compileren de volgende parameter meegeven in de syntax:

 gcc -Wall -c -pthread "%f".  ( Dit komt uit de  Geany  IDE)

Het is de -pthread dat belangrijk is !

En deze header insluiten in uw programma :

#include <pthread.h>

En ge kunt starten 

Hieronder een klein voorbeeld van multithreading.

*******************************************************************************

 

#include <stdio.h>
#include <unistd.h>   // posix library
#include <pthread.h>


void* myturn (void * arg)
{
   for(int i=0;i < 8;i++)
    {
    sleep(1);
    printf("My Turn ! %d\n",i);
    }
    return NULL;
}

void yourturn ()
{
   for(int i=0;i < 3;i++)
    {
    sleep(2);
    printf("Your Turn ! %d\n",i);
    }
    
}

int main(int argc, char **argv)
{
    
    pthread_t newthread;
    
    pthread_create(&newthread ,  NULL , myturn , NULL);
    
      
    yourturn();
    
    pthread_join(newthread , NULL);
    
    pthread_exit(NULL);
    return 0;

en het resultaat:


en dit gebeurt er als de code niet juist is , m.a.w.  geen threads.




***********************************************************************************







Geen opmerkingen:

Een reactie posten