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 mettre
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
WaitForSingleObject(hThread, INFINITE);
sinon 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


=> 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 :
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;
[/edit]