WIN32: Gros probleme de MultiThreading

WIN32: Gros probleme de MultiThreading - Programmation

Marsh Posté le 20-07-2001 à 21:23:50    

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.

Reply

Marsh Posté le 20-07-2001 à 21:23:50   

Reply

Marsh Posté le 21-07-2001 à 10:57:29    

Quelqu'un aurait-il une idée?

Reply

Marsh Posté le 21-07-2001 à 20:20:12    

pas de nouvelle?

Reply

Marsh Posté le 21-07-2001 à 23:27:48    

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+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 22-07-2001 à 17:15:08    

#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);
}

Reply

Marsh Posté le 22-07-2001 à 17:23:32    

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??????

Reply

Marsh Posté le 23-07-2001 à 22:53:42    

y'a quelqu'un???????

Reply

Marsh Posté le 24-07-2001 à 09:50:54    

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.

Reply

Marsh Posté le 24-07-2001 à 21:02:36    

Guz je t'ai donc envoyé le projet par mail.
 
Si quelqu'un d'autre veut apporté sa petite contribution.

Reply

Marsh Posté le 25-07-2001 à 10:21:19    

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.

Reply

Marsh Posté le 25-07-2001 à 10:21:19   

Reply

Marsh Posté le 25-07-2001 à 20:30:37    

j'ai tout renvoyé...

Reply

Marsh Posté le 27-07-2001 à 22:28:56    

Il est passé où le gars GUZ????

Reply

Marsh Posté le 30-07-2001 à 21:12:27    

Quelqu'un aurait il une idée sur mon probleme.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed