05. juni 2004 - 15:58
Der er
12 kommentarer og 1 løsning
Tråde i c++
Hej Jeg er ny i tråde, så jeg kunne godt bruge lidt hjælp. Hvorfor kan jeg ikke kompilere følgende kode med g++ kompileren? Tak AHR ******************** #include <iostream.h> #include <pthread.h> void* x() { cout<<"x"<<endl; } void* y() { cout<<"y"<<endl; } int main() { pthread_t xy; pthread_create(&xy, NULL, x, NULL); pthread_create(&xy, NULL, y, NULL); return 0; }
Annonceindlæg fra Capgemini
Hvis du ændrer x og y til: void* x(void* a) { cout<<"x"<<endl; return NULL; } void* y(void* a) { cout<<"y"<<endl; return NULL; } og compiler på en platform som unerstøtter POSIX threads (læs: ikke windows), så bør det også compile.
Tak. Nu vil det kompileres men mine tråde skriver ikke x samt y ud på skærmen. Nogen der ved hvorfor? Jeg benytter cygwin samt g++ til kompilering. Tak AHR
Prøv at lade main thread vente indtil de 2 tråde har afsluttet.
Skriver jeg bare pthread_join; i min main virker det stadig ikke. Men jeg skal jo joine de trådene så der skal vel et eller andet mellem (). Altså pthread_join(xxxxx) Kan du hjælpe med det. Tak igen
void *retval; pthread_join(xy,&retval);
Koden ser nu sådan ud. Den kompilerer men udskriver ikke sætningerne. Nogen yderligere ideer. ******** #include <iostream.h> #include <pthread.h> void* x(void* a) { cout<<"x"<<endl; return NULL; } void* y(void* a) { cout<<"y"<<endl; return NULL; } int main() { pthread_t xy; pthread_create(&xy, NULL, x, NULL); pthread_create(&xy, NULL, y, NULL); void *retval; pthread_join(xy,&retval); return 0; }
Virker nu med følgende: #include <iostream.h> #include <pthread.h> void* x(void* a) { int b=0; while(b<10) { cout<<"x"<<endl; b++; } return NULL; } void* y(void* a) { int b=0; while(b<10) { cout<<"y"<<endl; b++; } return NULL; } int main() { pthread_t xy; pthread_create(&xy, NULL, x, NULL); pthread_create(&xy, NULL, y, NULL); pthread_join(xy,NULL); pthread_join(xy,NULL); return 0; }
05. juni 2004 - 20:29
#10
#include <pthread.h> #include <iostream> using namespace std; void *x(void *a) { cout << "x" << endl; return NULL; } void *y(void *a) { cout << "y" << endl; return NULL; } int main() { pthread_t xy1,xy2; pthread_create(&xy1, NULL, x, NULL); pthread_create(&xy2, NULL, y, NULL); void *retval1,*retval2; pthread_join(xy1,&retval1); pthread_join(xy2,&retval2); return 0; } virker fint hos mig. Det burde ikke gøre noget forskel om man skriver 1 eller 10 gange. Jeg har pyntet lidt ved at bruge 2 forskellige tråd referencer. Jeg tror iøvrigt ikke at cout er thread safe, så principielt burde der bruges en mutex.
16. juni 2004 - 22:08
#11
Tid at få lukket spørgsmålet ?
21. juni 2004 - 22:25
#12
?
25. juli 2004 - 23:18
#13
??
Kurser inden for grundlæggende programmering