acces adresse mémoire commune
Bonjour,
j'essaye de faire un système multi thread avec calcul du tps restant, et lecture de ce temps sur commande.
Voilà mon code épuré pour le post :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
| //Thread.h
struct Thread_info {
struct arg arg;
pthread_t thread;
pthread_mutex_t mutex;
long* remaining_time;
};
class Thread{
private:
struct Thread_info Thread_info;
static void* Thread::Thread_function(void* arg);
public:
int Start();
long getRT();
};
//Thread.cpp
void* Thread::Thread_function(void* arg){
Thread *thread = (Thread*) arg;
process_1(&(thread->Thread_info.mutex),thread->Thread_info.remaining_time);
return NULL;
}
int Thread::Start(){
this->Thread_info.mutex = PTHREAD_MUTEX_INITIALIZER;
if ( pthread_create( &(this->Thread_info.thread), NULL,Thread::Thread_function,(void *)this) ){
printf("error creating thread.");
return 1;
}
return 0;
}
long Thread::getRT(){
long ii;
pthread_mutex_lock(&(this->Thread_info.mutex));
ii = *(this->Thread_info.remaining_time);
pthread_mutex_unlock(&(this->Thread_info.mutex));
return ii;
}
int process_1( pthread_mutex_t* mutex, long* remaining_time)
{
int N = 30;
time_t t1, t2, t3;
t1 = time(NULL);
for (int ii = 0;ii<N;ii++)
{
Sleep(1000); //traitement
t2 = time(NULL);
t3=(N-ii-1)*(t2-t1)/(ii+1);
cout<<t3<<endl;
pthread_mutex_lock(mutex);
*remaining_time = (long)t3;
pthread_mutex_unlock(mutex);
}
return 0;
}
//main.cpp
void main()
{
char num[3];
int num_function, a;
long b;
Thread *tab_Thread;
tab_Thread = new Thread[50];
int ii=0;
while (1){
cout<<"Lequel ?"<<endl;
cout<<" 1: lancer thread.\n 2: get time"<<endl;
cin >> num;
sscanf(num, "%d", &num_function);
if (num_function==1){
ii++;
a = tab_Thread[ii].Start();
cout<<a<<endl;
}
else
if (num_function==2){
b = tab_Thread[ii].getRT();
cout<<b<<endl;
//delete *tab_Thread[ii];
}
} |
Voila pour le code. Donc en gros je lance un thread et pendant son execution j'appel getRT(). Sauf qu'il me renvoie toujours la valeur : -858993460.
Pourtant, dans mon code (pas apaprent ici), dans process_1 je fais exactement la meme chose avec un char** en assignant par exemple: *a = "toto". Et avec la fonction qui va bien je peux très bien lire cette variable et obtenir "toto".
Voilà, est ce que vous auriez une explication ?
Merci par avance.