Quoi? t
est un fil, il ne "voit" vraiment rien. Strictement, il est une variable qui représente un fil - vous avez pas réellement créé un fil - mais en supposant que vous en créer un, il exécute dans le même processus que main()
, il partage l'espace mémoire en ce sens, mais il n » t partager la portée de main. Les fonctions qui s'exécutent dans ce thread peuvent voir toutes les variables dans la portée de ces fonctions. Vous pouvez passer un pointeur sur i
comme pointeur de données utilisateur sur pthread_create
. Ou si vous avez besoin d'accéder à plus que i
, vous pouvez passer un pointeur vers une structure qui contient (entre autres) un pointeur vers i
, et ainsi de suite.
code Exemple:
#include <pthread.h>
#include <iostream>
#include <cstring>
void *thread_entry_point(void *data) {
int *idata = static_cast<int*>(data);
std::cout << "thread: i = " << *idata << "\n";
*idata = 23;
return const_cast<char*>("might as well return something");
}
int main() {
int i = 12;
pthread_t thr;
int err = pthread_create(&thr, 0, thread_entry_point, &i);
if (err == 0) {
void *result;
pthread_join(thr, &result);
std::cout << "main: result = " << static_cast<const char*>(result) << "\n";
std::cout << "main: i = " << i << "\n";
} else {
std::cout << "error creating thread: " << err << " " << std::strerror(err) << "\n";
}
}
Eh bien ... vous pouvez passer '& I' comme argument pour le fil de le mettre dans le champ d'application de la fonction de fil. –
@ André: oui, j'y arrive :-) –
& Andre. Quelqu'un peut-il coller le code de travail complet pour montrer comment cela fonctionne. Évidemment, je suis nouveau à Pthread. – vrbilgi