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
| #include "dllacq.h"
#include <math.h>
volatile int FINACQ=0;
volatile float tabacq[1000];
double PI=3.141;
int ir;
int iw;
int v;
int __stdcall StartAcquisition(void) {
HANDLE hThread;
DWORD dwThreadId, dwThrdParam = 1;
FINACQ = 0;
hThread = CreateThread(NULL, 0, Fthread, &dwThrdParam, 0, &dwThreadId);
if (hThread == NULL) {
return(GetLastError());
}
else{
CloseHandle(hThread);
}
return 0;
}
DWORD WINAPI Fthread( LPVOID lpParam) {
while(FINACQ != 1)
{
if (iw = ir)
{
tabacq[iw] = Lit_une_donnee();
if(iw != ir)
{
iw=(iw+1)%1000;
}
}
Sleep (400);
}
FINACQ=2;
return 0;
}
double Lit_une_donnee() {
int parasite;
static double X=0;
X+=0.3; if(X> (2*PI)) X = X - (2*PI);
parasite = (rand() % 3 - 2);
return(10*sin(X) + parasite);
}
void __stdcall StopAcquisition(void) {
FINACQ = 1;
while(FINACQ != 2);
FINACQ=0;
}
int __stdcall GetValues(float*mtab, int maxval){
int n=0;
while ((ir!= iw)&&(n<=maxval))
{
mtab[n]= tabacq[ir];
ir=(ir+1)%1000;
}
return n;
} |
Partager