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
| #include <iostream>
#include <time.h>
#include <windows.h>
#include <stdio.h>
#include "C_RS232_Win_Overlapped.h"
using namespace std ;
C_Rs232_Win_Overlapped *rsWin;
char buf[128];
int nb;
char commande[] = "com1:96,8,n,1";
char commande0[]="AT+CMGF=1\r\n";
char commande1[]="AT+CMGS=\"+33699285177\"\r\n";
char commande2[128];
int Valeur1;
HANDLE h, hThread1, hThread2;
HANDLE hMutex;
DWORD Thread1ID, Thread1Param, Thread2ID, Thread2Param;
BOOL Res;
HANDLE Tableau[2];
HANDLE hEventEau;
HANDLE hEventElec;
DWORD WINAPI Thread1( LPVOID lpParam )
{
WaitForSingleObject(hEventEau, INFINITE);
WaitForSingleObject(hMutex, INFINITE);
rsWin->EnvoyerMessage("AT+CPIN=1234\r",13);
Sleep(2000);
rsWin->EnvoyerMessage(commande0,11);
Sleep(1000);
rsWin->EnvoyerMessage(commande1,strlen(commande1));
rsWin->EnvoyerMessage("SURCONSOMMMATION \rEnergie : Eau",31);
Sleep(4000);
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;
return 0;
}
DWORD WINAPI Thread2( LPVOID lpParam )
{
WaitForSingleObject(hEventElec, INFINITE);
WaitForSingleObject(hMutex, INFINITE);
rsWin->EnvoyerMessage("AT+CPIN=1234\r",13);
Sleep(2000);
rsWin->EnvoyerMessage(commande0,11);
Sleep(1000);
rsWin->EnvoyerMessage(commande1,strlen(commande1));
rsWin->EnvoyerMessage("SURCONSOMMMATION \rEnergie : Elec",32);
Sleep(5000);
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;
ResetEvent(hEventElec);
ReleaseMutex(hMutex);
return 0;
}
void main()
{
rsWin=new C_Rs232_Win_Overlapped(commande);
printf("Deux threads ecrivent a l'ecran avec mutex...\n\n\r");
hEventEau = CreateEvent(NULL, TRUE, FALSE, "Surconsommation Eau");
hEventElec = CreateEvent(NULL, TRUE, FALSE, "Surconsommation Elec");
hMutex = CreateMutex(NULL, FALSE, NULL);
hThread1 = CreateThread(NULL, 0, Thread1, &Thread1Param, 0, &Thread1ID);
Tableau[0] = hThread1;
hThread2 = CreateThread(NULL, 0, Thread2, &Thread2Param, 0, &Thread2ID);
Tableau[1] = hThread2;
while(1)
{
Valeur1=0;
cout<<"Valeur 1 : ";
cin>>Valeur1;
if (Valeur1==1)
{
SetEvent(hEventEau);
ResetEvent(hEventEau);
ReleaseMutex(hMutex);
}
if (Valeur1==2)
{
SetEvent(hEventElec);
}
}
WaitForMultipleObjects(2, Tableau, TRUE, INFINITE);
getchar();
} |
Partager