6
votes

Fils de C11 sur Windows

Je crée des logiciels croisés dans Visual Studio 2012 Express sur Windows. Pour des raisons évidentes, je ne peux pas utiliser le système de .NET :: filetage :: thread . J'espérais pouvoir utiliser les nouvelles fonctionnalités de threading de C11 ( threads.h , pas pthread.h ), lors de l'utilisation de VS2012, car j'ai créé un cadre abstrait basé sur la VS2012. Formulaires nets. Je commence à croire qu'il est impossible pour Windows. Est-ce que quelqu'un a une idée? Je n'utiliserai que des bibliothèques C ++ (boost et std) si ce sont mes options uniquement.

Y a-t-il quelqu'un qui sait quoi faire?


3 commentaires

Visual Studio ne prend généralement pas en charge C, à l'exception de ces fonctionnalités qu'elle partage avec C ++. Et je ne pense pas qu'ils envisagent de le soutenir à tout moment, si jamais.


Autant que je sache, la bibliothèque de threading C11 n'est pas implémentée dans MSVC. (Ils ont toujours un moyen d'aller pour la conformité C99.) Depuis que vous êtes sur VS2012, vous auriez beaucoup mieux de chance avec le C ++ 11 Library de threading que est disponible pour vous.


Tu as probablement raison.


3 Réponses :


11
votes

Visual Studio 2012 ne prend pas en charge le filetage de C11 (Microsoft a indiqué à plusieurs reprises qu'elle n'a guère d'intérêt à maintenir le courant C, préférant se concentrer sur C ++), mais il fait prend en charge C ++ 11 STD :: Fil et installations connexes . Si vous écrivez C ++, vous devez sans soumission les utiliser de toute façon au lieu des bibliothèques de threading de C.


5 commentaires

+1 pour remarquer l'OP mentionné C11 et non C ++ 11. J'aurais répondu comme si l'OP avait tort à propos de C ++ 11 Filetage Support dans Visual C ++ ...


Merci, la raison pour laquelle je préfère C11 est pour la compatibilité future avec C, si je décide jamais d'augmenter la performance. Mais STD a en effet beaucoup d'avantages.


"Compatibilité future avec C, si je décide jamais d'augmenter la performance" ... hein? C ++ bien écrit peut être aussi performant que C. Le C vs. C ++ n'est pas une performance une performance (du moins pas avec des compilateurs modernes), mais un sur le style et les méthodologies de programmation.


La différence entre C et C ++ est en effet très faible ces jours-ci, mais la programmation des OOP et des génériques ne peuvent pas suivre de manière procédurale. Mais vous avez raison sur les méthodologies. En fait, je n'aime pas que (par exemple) les applications de niveau plus bas sont écrites dans des langues telles que Java et HTML5 / JavaScript. Tout d'abord, vous devriez faire ce que vous avez aussi bon que possible avant de dépendre des facteurs externes (CPU plus rapide). Ceci ne cache que le codage de la qualité inférieure. Mais je suppose que c'est là que nous nous dirigeons.


C ++ peut même être plus rapide que c et produire des fichiers binaires plus petits si elles sont correctement écrites. Il n'y a pas de telle chose que les programmes de style ÖOP sont plus lents "Nexday. C'était probablement une question au début, WHN C ++ était une construction au-dessus de C, mais en 2016, cela n'est plus pertinent." OUOP et programmation générique ne peuvent pas Suivez la procédure «est une fausse déclaration.



0
votes

L'interface de thread C11 a été principalement copiée à partir de l'interface de thread de Dikumware dans leur bibliothèque de threads proèbre. Afair, leurs affaires fonctionnent sur différentes plates-formes et ont créé cette interface comme intersection des fonctionnalités des threads Windows et des threads POSIX.

Que ce soit ou non, ils l'ont maintenant comme «officiel» de la bibliothèque de thread C11, je ne sais pas, mais cela ne devrait pas être loin de celui-ci.


0 commentaires

6
votes

Visual Studio 2017 contient un en-tête xThreads.h code> qui est très similaire mais légèrement différent de threads.h code>. Par exemple:

de https://fr.cppreference.com/w/c/ Fil / thrd_sleep P>

#include <thr/xthreads.h>
#include <time.h>
#include <stdio.h>

int main(void)
{
    struct xtime stoptime;
    xtime_get( &stoptime, 1);
    stoptime.sec += 1;
    printf("Time: %s", ctime(&(time_t){time(NULL)}));
    _Thrd_sleep( &stoptime ); 
    printf("Time: %s", ctime(&(time_t){time(NULL)}));
}


2 commentaires

Ce fichier d'en-tête est sans papiers et est donc soumis à des modifications incompatibles. Pour un exemple, voir DéveloppeurCommunity. VisualStudio.com/content/problem/413586/...


Merci, j'ai ajouté un note pour informer les autres.