_endthreadex (0) κολλάει

ψήφοι
2

Δεν έχω κάποιο κώδικα που δεν είχα αρχικά να δημιουργήσετε ότι χρησιμοποιεί _beginthreadex και _endthreadex. Για κάποιο λόγο, όταν καλεί _endthreadex (0), η κλήση απλά κρέμεται και ποτέ δεν επιστρέφει. Οποιεσδήποτε ιδέες για το τι θα έπρεπε κανονικά να προκαλέσει αυτή η κλήση να κρεμάσει;

Δημοσιεύθηκε 09/12/2008 στις 16:05
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
9

Η απάντησή μου είναι πολύ αργά, αλλά ακόμα κάποιος θα το χρησιμοποιήσει.

Στην περίπτωσή μου _endthreadex κρεμάστηκε όταν ξεφορτώνουν dll και να διαγραφούν κάποια παγκόσμια αντικείμενα. Ένα από τα παγκόσμια αντικείμενα είχαν άλλο νήμα στο εσωτερικό και ότι το νήμα που εκτελούνται, επίσης, την έξοδο νήμα. Αυτό προκάλεσε αδιέξοδο διότι DllMain χάρτη ήδη κλειδωμένη μνήμη CRT. Διαβάστε DllMain βοήθεια και διαπιστώσετε ότι δεν επιτρέπεται να κάνει οποιαδήποτε άλλη ενέργεια σε άλλα θέματα ή διαδικασίες κατά τη διάρκεια DllMain κλήσης.

Απαντήθηκε 11/05/2012 στις 21:10
πηγή χρήστη

ψήφοι
4

_endthreadex τελειώνει το νήμα, έτσι ώστε να μην μπορεί να επιστρέψει. Αυτό είναι το νόημα του αποκαλώντας.

EDIT: Είναι λίγο ασυνήθιστο να καλέσετε _endthreadex, κανονικά θα αφήσουμε την επιστροφή διαδικασία εκκίνησης το νήμα και το χρόνο εκτέλεσης καλεί _endthreadex για εσάς. Μπορεί να χρειαστεί να εξηγήσετε λίγο περισσότερο, αυτό που προσπαθούμε να κάνουμε για να μπορέσουμε να βοηθήσουμε.

Απαντήθηκε 09/12/2008 στις 16:14
πηγή χρήστη

ψήφοι
1

Είσαι λάθος κλήση _endthreadex () για να επιχειρήσει να τερματίσετε μια κλωστή από το κύριο νήμα;

Η λειτουργία _endthreadex () έχει ως στόχο να κληθεί μέσα στο νήμα που θέλετε να τερματίσετε να αναφέρετε μια τιμή επιστροφής, καθώς και για την κατάλληλη «ανάκτηση των πόρων που διατίθενται για το νήμα.» Δεν θα χρειαστεί να καλέσετε σε έναν καταστροφέα από το κύριο νήμα. Θα μπορούσε, σε καταστροφέα, σήμα με το νήμα μέσω ενός γεγονότος (βλ SetEvent , καλείται από το κύριο νήμα) ότι το νήμα θα πρέπει να βγείτε το συντομότερο δυνατόν, και στη συνέχεια το νήμα που εξέρχεται τελευταία δήλωσή της, θα καλέσει _endthreadex () .

Κλήση _endthreadex () στο κύριο νήμα σας θα μπορούσε να προκαλέσει η διαδικασία να κρεμάσει, επειδή έχετε τερματιστεί κύριο νήμα σας, αλλά θα εξακολουθούν να έχουν το αρχικό νήμα θα ήθελε να τερματίσει ακόμη σε εξέλιξη.

Απαντήθηκε 09/12/2008 στις 16:54
πηγή χρήστη

ψήφοι
0

Εντάξει .... καλά, endthreadex παίρνει κάλεσε την Deconstructor της τάξης μου μέσω «διαγραφή classinstance» ... και ότι η κλήση Deconstructor ποτέ δεν επιστρέφει ... έτσι το σύνολο κολλάει το πράγμα

Απαντήθηκε 09/12/2008 στις 16:18
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more