je poste car je suis en train d’écrire une bibliothèque qui fournit une interface portable Windows/Linux pour les threads. pour Windows j'utilise l'api win32 et pour linux pthread. sauf que pthread propose beaucoup plus d'options que win32. voici pour quelle solution j'ai opter (wrapper pour pthread_attr_getinheritsched):
ou vous l'aurez compris, linux_attr est de type pthread_attr_t. le problème c que certaines fonction sont plus délicates qu'un simple retour de code d'erreur. je pense par exemple a pthread_join/exit et leurs equivalent windows, GetExitCodeThread/ExitThread. en effet, la ou pthread_join() prend en deuxième paramètre un void **ptr et pthread_exit() un void *ret, GetExitCodeThread() prend un DWORD* et Exit thread() un DWORD ! Windows ne permet donc pas de retourner n'importe quelle type de valeur, contrairement a Linux ! je cherche donc un moyen de créer des fonctions pour ma lib qui règle le problème de façon transparente pour l'utilisateur. je sais que le plus simple serait d'imposer l'utilisation de DWORD au linuxiens, mais je trouve pas ca cool. et j'avoue avoir un peu la flemme de réimplémenter ses fonctions de A a Z, avec un système de liste chainée et tout le bazard. Donc au final, si quelqu'un a une idée, il serait généreux de m'en faire part...
je poste car je suis en train d’écrire une bibliothèque qui fournit une interface portable Windows/Linux pour les threads. pour Windows j'utilise l'api win32 et pour linux pthread.
Il faudrait voir l'implémentation de pthread pour Windows, comme c'est fait.
Sinon, tu peux te faire une structure pour chaque thread dans laquelle tu ranges tout ce que tu veux, et quand tu appelles ta fonction, au lieu d'appeler directement la fonction qui retourne le DWORD, tu consultes la structure associée au thread en interne, et tu renvoies le champs générique dedans que tu auras géré.
je poste car je suis en train d’écrire une bibliothèque qui fournit une interface portable Windows/Linux [] je sais que le plus simple serait d'imposer l'utilisation de DWORD au linuxiens, mais je trouve pas ca cool. et j'avoue avoir un peu la flemme de réimplémenter ses fonctions de A a Z, avec un système de liste chainée et tout le bazard.
Tu as pris le problème à l'envers. Il faut d'abord que tu définisse l'API de ta bibliothèque avec uniquement des types provenant de ta bibliothèque. Ensuite, tu implémentes cela pour Windows, pour Linux, et pour n'importe quel système ayant assez de fonctionnalités pour supporter ta bibliothèque.
bon, je sais que je répond tard, mais j'ai beaucoup réfléchi, et voila comment je représente le problème: je cherche a faire une fonction thread_join(), qui soit portable windows/linux, et qui en paramètre prenne un void**ptr, pour stocker la valeur de sortie d'un thread. sous linux, pas de problème, j'utilise pthread, en transmettant juste mes arguments. sous windows, on peut juste récupérer un DWORD comme valeur de sortie d'un thread. comment puis-je résoudre ce problème ?
probleme de type en fonction de l'os
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html