Bonjour, je souhaite creer une application multitache, qui génère automatiquement un sms en fonction de la valeur d'un thread.
Je ne sais pas si j'ai utilisé la bonne méthode ... A mon avis j'ai oublier une étape ou confondu quelque chose car Visual me sort une erreur de mémoire ...
Le but étant que dans une application, je génère un message différent en fonction que de la valeur que mon thread met dans ma memoire partagée.
La liaison RS et l'envoi sans les Thread fonctionne parfaitement.

Voici le code de mon fichier main.cpp
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
#include <iostream>
#include <time.h>
#include <windows.h> 
#include <stdio.h> 
#include "C_RS232_Win_Overlapped.h"
using namespace std ;
 
char buf[128];
int nb;
char commande[] = "com1:96,8,n,1";
char commande0[]="AT+CMGF=1\r\n";
char commande1[]="AT+CMGS=\"+33XXXXXXXXX\"\r\n";
char commande2[128];
int Valeur1;
int Valeur2;
HANDLE h, hThread1, hThread2; 
HANDLE hMutex; 
DWORD Thread1ID, Thread1Param, Thread2ID, Thread2Param; 
BOOL Res; 
HANDLE Tableau[2]; 
 
DWORD WINAPI Thread1( LPVOID lpParam ) 
{ 
	cout<<"Valeur du Thread 1 :";
	cin>>Valeur1;
	if (Valeur1=1)
		{
C_Rs232_Win_Overlapped rsWin(commande);
		rsWin.EnvoyerMessage("AT+CPIN=2580\r",13);
		Sleep(2000);
		rsWin.EnvoyerMessage(commande0,11);
		Sleep(1000);
		rsWin.EnvoyerMessage(commande1,strlen(commande1));
		rsWin.EnvoyerMessage("SURCONSOMMMATION \rEnergie : Eau",31);
		Sleep(3000);
		commande2[0]=0x1A;
		commande2[1]=0;
		rsWin.EnvoyerMessage(commande2,1);
		commande2[0]=0x0A;
		commande2[2]=0;
		rsWin.EnvoyerMessage(commande2,1);
		commande2[0]=0x0D;
		commande2[1]=0;
		rsWin.EnvoyerMessage(commande2,1);
 
		//nb = rsWin.LireMessage(buf , 128);
		buf[nb-1] = 0;
 
 
		//nb = rsWin.LireMessage(buf , 128 , 0x0d);
		//buf[nb-1] = 0;
	}
ReleaseMutex(hMutex); 
return 0; 
} 
 
DWORD WINAPI Thread2( LPVOID lpParam ) 
{ 
	cout<<"Valeur du Thread 2 :";
	cin>>Valeur2;
	if(Valeur2=1)
{
C_Rs232_Win_Overlapped rsWin(commande);
		rsWin.EnvoyerMessage("AT+CPIN=2580\r",13);
		Sleep(2000);
		rsWin.EnvoyerMessage(commande0,11);
		Sleep(1000);
		rsWin.EnvoyerMessage(commande1,strlen(commande1));
		rsWin.EnvoyerMessage("SURCONSOMMMATION \rEnergie : Elec",32);
		Sleep(3000);
		commande2[0]=0x1A;
		commande2[1]=0;
		rsWin.EnvoyerMessage(commande2,1);
		commande2[0]=0x0A;
		commande2[2]=0;
		rsWin.EnvoyerMessage(commande2,1);
		commande2[0]=0x0D;
		commande2[1]=0;
		rsWin.EnvoyerMessage(commande2,1);
 
		//nb = rsWin.LireMessage(buf , 128);
		buf[nb-1] = 0;
 
 
		//nb = rsWin.LireMessage(buf , 128 , 0x0d);
		//buf[nb-1] = 0;
	}
		ReleaseMutex(hMutex); 
return 0; 
} 
 
void main()
{	
printf("Deux threads ecrivent a l'ecran avec mutex...\n\n\r"); 
hMutex = CreateMutex(NULL, FALSE, NULL); 
hThread1 = CreateThread(NULL, 0, Thread1, &Thread1Param, 0, &Thread1ID); 
Tableau[0] = hThread1; 
getchar();
hThread2 = CreateThread(NULL, 0, Thread2, &Thread2Param, 0, &Thread2ID); 
getchar();
Tableau[1] = hThread2; 
WaitForMultipleObjects(2, Tableau, TRUE, INFINITE); 
getchar();
	}
J'espère que quelqu'un pourra résoudre mon soucis