Programmes C threadés dans minGW

Je crée un programme qui intercepte tous les paquets lorsqu’un certain lien est en panne. J’aurais besoin d’implémenter le renifleur et le vérificateur de liens en tant que threads. Mais minGW n’a pas de pthreads.

Comment implémentez-vous les threads dans minGW?

Edit: répondre

http://www.codeproject.com/KB/threads/sync.aspx

Vivek Goel m’a conduit à ceci (_beginthread). Les deux exemples sont compilés sur Code :: blocks / minGW!

MinGW ne fournit pas un modèle POSIX complet. Si vous voulez des threads dans le paquet standard, vous devrez utiliser la variété Windows.

Il est indiqué sur la page principale de MinGW:

Les compilateurs MinGW fournissent un access aux fonctionnalités du runtime Microsoft C et à certains runtimes spécifiques à la langue. MinGW, étant minimaliste, ne tente pas et ne tentera jamais de fournir un environnement d’exécution POSIX pour le déploiement d’applications POSIX sur MS-Windows. Si vous souhaitez déployer une application POSIX sur cette plate-forme, envisagez plutôt Cygwin.

Cygwin prend en charge les pthreads car il fournit la DLL Cygwin, une couche d’émulation, alors que MinGW est plutôt gcc pour une utilisation avec la méthode Windows.

Sinon, si Cygwin n’est pas une option, vous pouvez regarder dans Pthreads / Win32 qui prétend fonctionner avec MinGW.

Avec MinGW, vous avez quelques options. Mes recommandations:

  1. Utilisez l’API Windows native pour créer vos threads.

  2. Utilisez une bonne bibliothèque pour gérer cela. J’utilise généralement un framework C ++ appelé JUCE pour avoir une vie meilleure.

En utilisant l’API Windows, vous pouvez essayer quelque chose comme ceci:

/* * main.c * * Created on: 18/10/2011 * Author: Cesar Carlos Ortiz Pantoja. */ #include  #include  int exitCondition; struct threadParams{ int param1; int param2; }; static DWORD WINAPI myFirstThread(void* threadParams) { struct threadParams* params = (struct threadParams*)threadParams; while(exitCondition){ printf("My Thread! Param1:%d, Param2:%d\n", params->param1, params->param2); fflush(stdout); Sleep(1000); } return 0; } int main(void){ DWORD threadDescriptor; struct threadParams params1 = {1, 2}; exitCondition = 1; CreateThread( NULL, /* default security atsortingbutes. */ 0, /* use default stack size. */ myFirstThread, /* thread function name. */ (void*)&params1, /* argument to thread function. */ 0, /* use default creation flags. */ &threadDescriptor); /* returns the thread identifier. */ while(1){ printf("Main Program!\n"); fflush(stdout); Sleep(2000); } return 0; } 

Cordialement