IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Problème de communications entre threads


Sujet :

Windows

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème de communications entre threads
    Bonjour,
    A l'aide des tutoriels et des faqs j'ai essayé de mettre au point un petit programme (création de trois trhreads dont 2 qui essayent d'envoyer un message au troisième ) mais étant plus que débutante sur le sujet je voudrai savoir les erreurs que j'ai pu commettre en programmant. Je vous remercie d'avance car je ne m'en sor pas!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    typedef struct msg_block_tag{
    	volatile DWORD f_ready, f_stop;
    	volatile DWORD sequence;
    	time_t timestamp;
    	CRITICAL_SECTION mguard;
    	DWORD data[256];
    } MSG_BLOCK;
    
    
    //prototypes
    DWORD WINAPI ThreadProc(LPVOID lpParam);
    DWORD WINAPI ThreadProcRec(LPVOID lpParam);
    void AffichageMessage(MSG_BLOCK *);
    void CreerMessage(MSG_BLOCK *);
    
    
    CRITICAL_SECTION crit_sec;
    HANDLE hSemaphore;
    
    MSG_BLOCK mblock = {0,0,0,0,0};
    
    //fonction principale
    DWORD _tmain(DWORD argc, LPTSTR argv [])
    {
    	DWORD ThreadId;
    	HANDLE hThread[3];
    	int i;
    	InitializeCriticalSection(&crit_sec);
    
    	hSemaphore = CreateSemaphore( NULL,2,2,NULL);
    
    	for&#40;i=0;i<2;i++&#41;
    		hThread&#91;i&#93; = CreateThread&#40;NULL, NULL, ThreadProc, NULL, NULL, &ThreadId&#41;;
    	printf&#40;"probleme\n"&#41;;
    	hThread&#91;2&#93; = CreateThread&#40;NULL, NULL, ThreadProcRec, NULL, NULL, &ThreadId&#41;;
    
    	WaitForMultipleObjects&#40;3,hThread,TRUE,INFINITE&#41;;
    	printf&#40;"probleme\n"&#41;;
    
    	
    	CloseHandle&#40;hSemaphore&#41;;
    
    	DeleteCriticalSection&#40;&crit_sec&#41;;
    
    	CloseHandle&#40;hThread&#41;;
    
    	printf&#40;"appuyer sur une touche!\n"&#41;;
    
    	getch&#40;&#41;; 
    	return 0;
    &#125;
    
    
    void AffichageMessage&#40;MSG_BLOCK *mblock&#41;
    &#123;
    	DWORD i, t_block = 0;
    	for&#40;i=0;i<256;i++&#41;
    		t_block ^= mblock->data&#91;i&#93;;
    	printf&#40;"message numero %d\n",mblock->sequence&#41;;
    
    	return;
    	
    &#125;
    
    //Procédure de creation de message 
    void CreerMessage&#40;MSG_BLOCK *mblock&#41;
    &#123;
    	DWORD i;
    	for&#40;i=0;i<256;i++&#41;
    		mblock->data&#91;i&#93; = rand&#40;&#41;;	
    	mblock->timestamp = time&#40;NULL&#41;;
    	return ;
    &#125;
    
    
    
    DWORD WINAPI ThreadProc&#40;LPVOID lpParam&#41;
    &#123;
    	WaitForSingleObject&#40;hSemaphore, INFINITE&#41;;
    	
    	//Pour ecrire sur la console
    	EnterCriticalSection&#40;&crit_sec&#41;;
    	printf&#40;"Thread %d demarre\n",&#40;int&#41;lpParam&#41;;
    	LeaveCriticalSection&#40;&crit_sec&#41;;
    
    	Sleep&#40;500&#41;;
    
    	//Pour ecrire un message
    	srand &#40;&#40;DWORD&#41;time&#40;NULL&#41;&#41;;
    //	while&#40;!mblock.f_stop&#41;&#123;
    		Sleep&#40;rand&#40;&#41;/100&#41;;
    		EnterCriticalSection&#40;&mblock.mguard&#41;;
    			if &#40;!mblock.f_stop&#41;
    			&#123;
    				mblock.f_ready = 0;
    			//	CreerMessage&#40;&mblock&#41;;
    				mblock.f_ready = 1;
    				mblock.sequence++;
    			&#125;
    		LeaveCriticalSection &#40;&mblock.mguard&#41;;
    //	&#125;
    //
    	//Pour ecrire sur la console 
    	EnterCriticalSection&#40;&crit_sec&#41;;
    	printf&#40;"Thread_recep %d termine\n",&#40;int&#41;lpParam&#41;;
    	LeaveCriticalSection&#40;&crit_sec&#41;;
    	
    	ReleaseSemaphore&#40;hSemaphore,1,NULL&#41;;
    
    	return 0;
    &#125;
    
    
    
    DWORD WINAPI ThreadProcRec&#40;LPVOID lpParam&#41;
    &#123;
    	
    	WaitForSingleObject&#40;lpParam, INFINITE&#41;;
    
    	//Pour ecrire sur la console
    	EnterCriticalSection&#40;&crit_sec&#41;;
    	printf&#40;"Thread %d demarre\n",&#40;int&#41;lpParam&#41;;
    	LeaveCriticalSection&#40;&crit_sec&#41;;
    
    	Sleep&#40;500&#41;;
    
    	//Pour afficher le message
    /*	EnterCriticalSection&#40;&mblock.mguard&#41;;
    	if&#40;!mblock.f_stop==0&#41;&#123;
    		AffichageMessage&#40;&mblock&#41;;
    		mblock.f_ready=0;&#125;
    	LeaveCriticalSection&#40;&mblock.mguard&#41;;
    */
    	//Pour ecrire sur la console
    	EnterCriticalSection&#40;&crit_sec&#41;;
    	printf&#40;"Thread %d termine\n",&#40;int&#41;lpParam&#41;;
    	LeaveCriticalSection&#40;&crit_sec&#41;;
    
    	return 0;
    &#125;

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    Tu peux nous decrire le probléme ? Compilation( Quelles erreurs ?) ? Execution ( Quel comportement ?) ?
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

Discussions similaires

  1. [c#] probléme de communication entre classe
    Par OpenGG dans le forum C#
    Réponses: 1
    Dernier message: 24/09/2006, 21h54
  2. Problème de communication entre php et Laszlo(Tomcat)
    Par YUN59 dans le forum Autres langages pour le Web
    Réponses: 1
    Dernier message: 21/07/2006, 13h45
  3. Problème de communication entre C# et ASP
    Par Prowlx dans le forum ASP
    Réponses: 1
    Dernier message: 19/07/2006, 17h37
  4. Communication entre thread
    Par JFPS Soft dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 03/02/2006, 17h38
  5. [c#][threading] communication entre threads
    Par orelero dans le forum C#
    Réponses: 6
    Dernier message: 02/01/2006, 00h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo