Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4704 connectés 

 


Dernière réponse
Sujet : WIN32: Gros probleme de MultiThreading
phlb Quelqu'un aurait il une idée sur mon probleme.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
phlb Quelqu'un aurait il une idée sur mon probleme.
phlb Il est passé où le gars GUZ????
phlb j'ai tout renvoyé...
Guz Salut,
 
J'ai pas recu ton projet alors essaie sur chery_guillaume@hotmail.com.
 
Voila je regarde et je te dirai ce que je comprends sur le forum.
 
A +. Guz.
phlb Guz je t'ai donc envoyé le projet par mail.
 
Si quelqu'un d'autre veut apporté sa petite contribution.
Guz Salut,
 
Je voudrai que tu me montres les lignes de code ou tu cree tes threads, je pense que tu as un probleme de "dependances". En effet si tes threads ont une mere et que tu suspends celle-ci, les threads enfants seront suspendus aussi.
 
Regardes ou copie moi le bout de code.
 
Sinon envoie-moi ton projer a guz@free.fr je regarde et je t'expliaue.
 
A plus.
phlb y'a quelqu'un???????
phlb dès que j'appel SuspendThread, dans le thread "interruptSimTask", pour suspendre le thread "rs232Task", toutes les threads sont bloquées, mais alors tous.
 
Parcontre si je mets un sleep(0) juste après le postThread message dans le thread "interruptSimTask", alors là ça fonctionne.
 
je comprends pas??????
phlb #include <windows.h>
#include <stdio.h>
 
#define MSG_TRANSMITRS232 WM_USER+0x01
 
HANDLE hRs232Task;
LONG   hRs232TaskId;
 
LONG     lInterruptSimTaskId=0;
HANDLE   hInterruptSimTask=NULL;
 
LONG     lDummyThreadId=0;
HANDLE   hDummyThread=NULL;
 
 
//****************************************
DWORD  interruptSimTask(LPVOID lpParameter) {
 
  MSG msg;
   
  while( GetMessage(&msg,NULL,0,0) ){
 
      if(msg.message!=MSG_TRANSMITRS232)continue;
 
      printf("GetMessage\n" );
 
      printf("currenttaskId=%d\n",GetCurrentThreadId());
 
      SuspendThread(hRs232Task);
       
      printf("OS_EnterInterrupt\n" );
 
      printf("transmitRS232SimTask Interrupt\n" );
 
      printf("OS_LeaveInterrupt\n" );
       
      ResumeThread(hRs232Task);
   }
 
   return 0;
}
 
//****************************************
DWORD  dummyTask(LPVOID lpParameter) {
 
   printf("Dummy still alive!\n" );
   while(TRUE){
      printf("Dummy still alive!\n" );
      Sleep(1000);
       
   }
   return 0;
   
}
 
//****************************************
DWORD rs232Task(LPVOID lpvParameter){
   
   Sleep(1000);
 
   while(TRUE){
      Sleep(0);
      printf("Wait Message ...\n" );
 
      PostThreadMessage(lInterruptSimTaskId,MSG_TRANSMITRS232,0,0);
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
      printf("PostThreadMessage ok!\n" );
       
   }
   
   return 0;
 
}
 
//****************************************
void main(void){
 
   hInterruptSimTask = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)interruptSimTask, NULL, 0, &lInterruptSimTaskId );  
   hDummyThread      = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)dummyTask, NULL, 0, &lDummyThreadId );  
   Sleep(2000);
   hRs232Task = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)rs232Task, NULL, 0, &hRs232TaskId );  
 
   while(TRUE)Sleep(100);
}
gilou Si au moins tu filais des extraits de code montrant les fonctions spoecifiques des thread employees et le contexte d'appel, peut etre qu'on pourrait avoir des idees, mais sinon, j'ai beau regarder dans ma boule de cristal, je peux pas t'aider plus.
A+,
phlb pas de nouvelle?
phlb Quelqu'un aurait-il une idée?
phlb Je suis sous Visual C++ 6.0 SP4, Windows NT 4.0 SP 5.
 
Une application console:  
 
Voila je presente le probleme:
 
j'ai 2 threads (thread1 et thread2)
et un troisieme: dummyThread.
 
thread1 envoi un message au thread2.
thread2 etait en attente de message et a la reception du message de thread1 il suspend ce dernier.  
 
C'est la que tout se passe mal.
 
Tous les threads user sont bloques meme le dummy thread qui n'a rien demander.
 
Ce cas ce present uniquement si dans la boucle du thread1 apres le PostThreadMessage je n'ai aucun appel qui le mettrait en sommeil.
 
Si quelqu'un connait ce probleme je suis preneur.
Merci d'avance.

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)