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
| extern "C" void __stdcall RecupMemoirePartagee()
// donc la c est le nom d une fonction contenue dans la dll
//et que je pourrai utiliser indépendament
{
// Attente mutex
dwWaitResult = WaitForSingleObject(hMutexIHMIn,10L);
// Je mets dans un variable le resultat de "WaitForSingleObject"
// qui a en paramètre "hMutexIHMIn" et "10L". Il me semble
// que hMutexIHMIn" est le jeton du semaphore
// de gestion mon espace partagé et "10L" et le timeout
// Que veux dire 10L?
/* Médinoc:
hMutexIHMIn est le handle du mutex utilisé (un mutex étant un sémaphore binaire).
10L indique un timeout de 10 millisecondes,
L signifiant que c'est un entier long (inutile ici sous un Windows 32 bits).
Au fait, dwWaitResult devrait être une variable locale, pas globale
(pour le handle, ça peut se pardonner (en rajoutant le préfixe g_ à son nom),
mais pour le résultat, c'est impardonnable).
*/
/* Médinoc: Pas d'espace entre un if (ou une fonction) et sa parenthèse s'il te plait, c'est illisible. */
if(dwWaitResult==WAIT_OBJECT_0) //si c'est ok alors
{
// Transfert des donnees depuis la memoire partagee
memcpy(&to_ihm_data, ToIHMPtr, sizeof(t_to_ihm));
// copier bloc memoire (destination, source, taille)
// par contre ->"&"<- to_ihm_data?
// (dans mon code j 'ai en init : static t_to_ihm *ToIHMPtr ;)
// ToIHMPtr?
// t_to_ihm?
// En clair je ne sais pas ce que je dois recuppérer et sous quel forme
// Un tableau serai sympa
/* Médinoc:
il semblerait que to_ihm_data et ToIHMPtr soient tous les deux des variables globales.
to_ihm_data doit être de type t_to_ihm et ToIHMPtr est de type t_to_ihm*
(Si tu ne sais pas à quoi sert l'opérateur &, replonge-toi dans tes cours de C avant de continuer).
memcpy() recoit donc deux pointeurs vers des données de type t_to_ihm, ainsi que la bonne taille, c'est OK.
Mais dans une application à toi, tu fais ce que tu veux tant que tu as le mutex...
*/
// Relachement du mutex
if( !ReleaseMutex(hMutexIHMIn) )
{
printf("IO : fail to release mutex IHM In.\n") ;
}
}
else
{
printf("IO : fail to obtain mutex IHM In.\n") ;
}
}
/* Médinoc:
Conseil: Faire retourner une valeur à la fonction, pour dire si la copie a réussi ou échoué,
et pourquoi (erreur ou timeout). Tu peux par exemple, retourner directement dwWaitResult
(mais ça n'indique pas l'erreur éventuelle sur ReleaseMutex()...)
*/ |
Partager