04. oktober 2004 - 22:37Der er
19 kommentarer og 1 løsning
Postfic threads
Hej, jeg har et problem med postfic threads. Mit program compiler fint, men under linkningen en kommer der en fejl som siger: undefined reference to pthread_create undefined reference to pthread_join.
Jeg har includeret pthread.h i filen - så det er ikke der problemet ligger.
Kan du fortælle mig hvordan man lavet timesliding. Altså så to tråde som kører i uendeligt While-løkker, deles om en CPU? LIgenu startes de begge, men den ene får inden CPU tid!
Du er nødt til at sætte trådene til at vente på "noget". Så vidt jeg ved er der ikke timeslicing indbygget i posix threads.
Du kan evt. lave en tredie tråd (med høj prioritet) der bytter om på de to første trådes prioritet på skift. Den tredie tråd vil så blot lave en sleep(...), bytte prioritet, sleep(...) bytte prioritet, forfra...
Der skulle meget gerne være schedulering af POSIX tråde, så hvis du har to tråde, som begge laver noget i stil med
int i; while (true) { i += 7; if (i > 2000000000) i = 0; }
så skulle begge tråde gerne få tid, hvis du har startet dem begge to. Sæt evt. en printf ind der kaldes for hver en million gennemløb eller noget i den stil, og se hvad der sker.
Jeg har prøvet bar at udskrive noget fra to uendelig while sætningen, hvor de hver kører i en tråd. Det ser ud som om det kun er den første som bliver startet som kommer til at køre.
Kan man ikke give en dem en periotet fra starten som foreksempelvis betyder at hvis en af trådene bliver vækket om, så overtaget den CPUen med det samme? Altså så den anden tråd kun bliver kørt "når der er tid til det"?
hvordan ændrer man så på trådenes prioritet? Jeg synes ikke at jeg har set noget nogen parameter til nogen funktion endnu som kendetegner trådenes prioritet.
Jeg skal opsamle nogle data - og dette skal kører hvert sekund. Hvis jeg har opsamlet alle data og der er tid "tilovers" inden næste opsamling af data, skal der laves noget statistik over dataene.
Der er forskellige måde at opsamle seriel data på i linux, som en fil, med signal eller skrive sit eget hardware interface, den "rigtige" metode er afhængig af dit behov, select passerede udmærket til mit project.
Brug select til at opsamle data i tråd 1, sæt et flag/mutex når nye data er klar, imellemtiden bruger tråd 2 så tiden mellem til at regne statistik. Hvis du kun vil lave for de helt nye data risikere du aldrig at få nogen, alternativt start beregning når du har et gyldigt sæt, kør den færdig start så på det nyeste gyldige sample.
Hvis du køre med 480Kbit/s kan du sætter tråd 1 til at vente med select (kan bruges som timer med de rigtige parameter) med den ønskede samplings tid og læser så fra seriel "filen" (dette kræver at data mængden ikke overstiger 4KB som standard bufferen i debian er for seriel), ellers må man skrue lidt på tiden.
9600 baud er ca. 1KB/s så man kan sagtens nå at opsamle inddata. Håber bare at det er hurtigt nok til at få alle data inden for 1 sek.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.