WIN32: Gros probleme de MultiThreading - Programmation
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+,
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);
}
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??????
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.
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.
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.
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.