Προς το περιεχόμενο

δημιουργία νημάτων και casting


dinak

Προτεινόμενες αναρτήσεις

Δημοσ.

έχω το εξής πρόβλημα. Σε μία σύνδεση μεταξύ client server δημιουργώ έναν file descriptor. Έστω ότι δημιουργώ και ένα νήμα για την περαιτέρω επεξεργασία της αίτησης μου.

 

>int new_fd;
pthread_create(&tid, NULL, (void *) process_request, (void *) new_fd);

 

και το νήμα καλεί την process_request που είναι δηλωμένη ως εξής

 

>
void process_request(void *socket_fd){

int s_fd=(int) socket_fd;

...........
...........
}

 

αλλά όταν τρέχω το πρόγραμμα εμφανίζεται το bad file descriptor. Τι μπορεί να συμβαίνει; Το πρόβλημα δε μπορεί να βρίσκεται σε κάποιο άλλο σημείο του κώδικα γιατί χωρίς δημιουργία νήματος, τρέχει κανονικά.

Δημοσ.

>int new_fd;
pthread_create(&tid, NULL, (void *) process_request, (void *) &new_fd);

 

>
void *process_request(void *socket_fd){

int s_fd= *((int *)) socket_fd;

...........
...........
}

 

Για δοκίμασε κάτι τέτοιο...

Δημοσ.

ναι!!! τώρα δούλεψε μια χαρά...αν και δεν έχω καταλάβει γιατί :P ευχαριστώ πολύ!

Δημοσ.

Έχεις int new_fd, αλλά θέλεις pointer. Οπότε σωστά το κάνεις cast σε void pointer. Όμως πρόσεξε ότι θέλεις να περάσεις την διεύθυνση του sock. Παίξε λίγο με printf για να καταλάβεις τι περνάς κάθε φορά.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...