bonjour,
depuis un programme externe j'appelle une fonction de ma DLL :
Code c++ : 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 void DLL_EXPORT initNI(long aN, long aDuration, long aDelta, long aCode) { static DWORD threadID; static HANDLE hThread; static paramPort *param; param = new paramPort; param->dtPulse = aDelta; param->nbPulse = aN; param->pulseDuration = aDuration; param->value = aCode; hThread = CreateThread(NULL, 0, sentPulse, param, 0, &threadID); WaitForSingleObject(hThread, 1); CloseHandle(hThread); delete param; }
Cette fonction crée un thread qui me permet ensuite d'envoyer un pulse sur une ligne d'une carte NI.
Cette fonction peut-être appelée à tout moment et cela me permet d'envoyer des pulses sur n'importe quelle ligne de ma carte NI de manière asynchrone.
Deux problèmes se posent :
1- ma fonction sentPulse ne reçoit pas toujours les bons paramètres, ils sont parfois "perdus" (c'est pour cette raison que j'ai des variables statiques, mais ça ne change rien) ;
2- je ne peut pas mettresinon mon thread devient bloquant et je ne veux pas car je ne peux pas envoyer d'autres pulses tant que le thread n'est pas fini
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part WaitForSingleObject(hThread, INFINITE);
=> Comment je peux transmettre mes données à ma fonction sans les perdre ?
=> ensuite comment je peux créer de manière asynchrone mes threads et détruire proprement mes thread ?
[edit]
ma structure paramPort est définie comme ceci :
[/edit]
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 typedef struct { long pulseDuration; long dtPulse; long nbPulse; long value; }paramPort;
Partager