60 votes

Comment démarrer un fil de discussion en langage C ?

J'ai utilisé fork() en C pour démarrer un autre processus. Comment puis-je démarrer un nouveau thread ?

0 votes

Cela dépend de la plate-forme. Voici comment procéder sous Windows : http://msdn.microsoft.com/en-us/library/ms682453.aspx

0 votes

Comme l'explique la documentation de CreateThread à laquelle vous avez accédé, si le programme utilise la bibliothèque d'exécution C, il faut utiliser _beginthreadex et non CreateThread.

0 votes

Merci, je ne l'avais pas remarqué. Comment savez-vous si vous utilisez le CRT ? Je pensais que tout le monde l'utilisait.

66voto

Commodore Jaeger Points 11949

Puisque vous avez mentionné fork(), je suppose que vous êtes sur un système de type Unix, auquel cas Les threads POSIX (généralement appelés pthreads) sont ceux que vous voulez utiliser.

Plus précisément, pthread_create() est la fonction dont vous avez besoin pour créer un nouveau thread. Ses arguments sont :

int  pthread_create(pthread_t  *  thread, pthread_attr_t * attr, void *
   (*start_routine)(void *), void * arg);

Le premier argument est le pointeur renvoyé vers l'identifiant du thread. Le deuxième argument est l'argument du thread, qui peut être NULL sauf si vous voulez démarrer le thread avec une priorité spécifique. Le troisième argument est la fonction exécutée par le thread. Le quatrième argument est l'unique argument passé à la fonction du thread lorsqu'elle est exécutée.

9 votes

Voici un exemple d'utilisation : timmurphy.org/2010/05/04/…

1 votes

Les threads POSIX ne sont-ils pas considérés comme du "plain C" maintenant que la norme C11 les définit ?

2 votes

Bien que l'API multithreading de C11 soit lourdement influencé par les threads POSIX, ils ne sont pas identiques. Il ne me semble donc pas juste de dire que les threads POSIX sont du "plain C".

17voto

Brannon Points 12633

A ma connaissance, le C ANSI ne définit pas le threading, mais il existe plusieurs bibliothèques disponibles.

Si vous travaillez sous Windows, établissez un lien avec msvcrt et utilisez _beginthread ou _beginthreadex.

Si vous travaillez sur d'autres plateformes, consultez la bibliothèque pthreads (je suis sûr qu'il en existe d'autres).

7voto

epatel Points 32451

Pthreads est un bon début, regardez aquí

7voto

botismarius Points 1333

Les threads ne font pas partie du standard C, donc la seule façon d'utiliser les threads est d'utiliser une bibliothèque (par exemple : POSIX threads sous Unix/Linux, _beginthread/_beginthreadex si vous voulez utiliser le runtime C de ce thread ou simplement l'API Win32 CreateThread).

2voto

Jay Conrod Points 12375

Consultez le pthread (POSIX thread).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X