Je souhaiterais savoir comment peut-on implémenter des threads en C++ de façon assez simple, et que le tout reste multi-plateforme ?
Utilise boost.thread
Dominique Vaufreydaz
Bonjour,
Je souhaiterais savoir comment peut-on implémenter des threads en C++ de façon assez simple, et que le tout reste multi-plateforme ?
Il y a en plus de boost : - commoncpp2 qui fait ca - la couche system de mon middleware OMiSCID - pleins d'exemples sur le Web surtout si tu ne veux que des threads et pas toute une floppée de classes.
Doms.
Bonjour,
Je souhaiterais savoir comment peut-on implémenter des threads en C++
de façon assez simple, et que le tout reste multi-plateforme ?
Il y a en plus de boost :
- commoncpp2 qui fait ca
- la couche system de mon middleware OMiSCID
- pleins d'exemples sur le Web surtout si tu ne veux que des threads
et pas toute une floppée de classes.
Je souhaiterais savoir comment peut-on implémenter des threads en C++ de façon assez simple, et que le tout reste multi-plateforme ?
Il y a en plus de boost : - commoncpp2 qui fait ca - la couche system de mon middleware OMiSCID - pleins d'exemples sur le Web surtout si tu ne veux que des threads et pas toute une floppée de classes.
Doms.
Venus²²
"gg" wrote in message news:453d1abe$0$25911$
Bonjour,
Je souhaiterais savoir comment peut-on implémenter des threads en C++ de façon assez simple, et que le tout reste multi-plateforme ?
merci bien,
gg
Dans une exemple, vous voyez SecondThreadFunc() est un thread nous voulons le lancer dans un second thread.
Sample Code
/* Compile options needed: Default options for a multithreaded console application. You need to compile the code as a .CPP file. */
// Wait until second thread has terminated. If you comment out the line // below, Counter will not be correct because the thread has not // terminated, and Counter most likely has not been incremented to // 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
printf( "Counter should be 1000000; it is-> %dn", Counter );
// Destroy the thread object.
CloseHandle( hThread ); }
"gg" <gg@voila.Fr> wrote in message
news:453d1abe$0$25911$ba4acef3@news.orange.fr...
Bonjour,
Je souhaiterais savoir comment peut-on implémenter des threads en C++ de
façon assez simple, et que le tout reste multi-plateforme ?
merci bien,
gg
Dans une exemple, vous voyez SecondThreadFunc() est un thread nous voulons
le lancer dans un second thread.
Sample Code
/* Compile options needed: Default options for a multithreaded console
application. You need to compile the code as a .CPP file.
*/
// Wait until second thread has terminated. If you comment out the line
// below, Counter will not be correct because the thread has not
// terminated, and Counter most likely has not been incremented to
// 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
printf( "Counter should be 1000000; it is-> %dn", Counter );
// Wait until second thread has terminated. If you comment out the line // below, Counter will not be correct because the thread has not // terminated, and Counter most likely has not been incremented to // 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
printf( "Counter should be 1000000; it is-> %dn", Counter );
// Destroy the thread object.
CloseHandle( hThread ); }
James Kanze
Venus²² wrote:
"gg" wrote in message news:453d1abe$0$25911$
Je souhaiterais savoir comment peut-on implémenter des threads en C++ de façon assez simple, et que le tout reste multi-plateforme ?
Dans une exemple, vous voyez SecondThreadFunc() est un thread nous voulons le lancer dans un second thread.
Il a dit multi-plateforme, à ce qu'il me semble. Or, ce que tu as écrit ne se compile même pas sur la plupart des plateformes auxquelles j'ai accès.
En fait, au moins d'utiliser une bibliothèque tièrce qui masque les différences, on ne peut actuellement pas faire du threading avec du code portable. Je m'attends cependant que ça change avec la prochaine version du C++. Et de toute probabilité (mais c'est loin d'être sûr), la syntaxe se ressemblerait un peu à celui de boost.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Venus²² wrote:
"gg" <gg@voila.Fr> wrote in message
news:453d1abe$0$25911$ba4acef3@news.orange.fr...
Je souhaiterais savoir comment peut-on implémenter des
threads en C++ de façon assez simple, et que le tout reste
multi-plateforme ?
Dans une exemple, vous voyez SecondThreadFunc() est un thread
nous voulons le lancer dans un second thread.
Il a dit multi-plateforme, à ce qu'il me semble. Or, ce que tu
as écrit ne se compile même pas sur la plupart des plateformes
auxquelles j'ai accès.
En fait, au moins d'utiliser une bibliothèque tièrce qui masque
les différences, on ne peut actuellement pas faire du threading
avec du code portable. Je m'attends cependant que ça change avec
la prochaine version du C++. Et de toute probabilité (mais c'est
loin d'être sûr), la syntaxe se ressemblerait un peu à celui de
boost.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Je souhaiterais savoir comment peut-on implémenter des threads en C++ de façon assez simple, et que le tout reste multi-plateforme ?
Dans une exemple, vous voyez SecondThreadFunc() est un thread nous voulons le lancer dans un second thread.
Il a dit multi-plateforme, à ce qu'il me semble. Or, ce que tu as écrit ne se compile même pas sur la plupart des plateformes auxquelles j'ai accès.
En fait, au moins d'utiliser une bibliothèque tièrce qui masque les différences, on ne peut actuellement pas faire du threading avec du code portable. Je m'attends cependant que ça change avec la prochaine version du C++. Et de toute probabilité (mais c'est loin d'être sûr), la syntaxe se ressemblerait un peu à celui de boost.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Venus²²
"James Kanze" wrote in message news: Venus²² wrote:
"gg" wrote in message news:453d1abe$0$25911$
Je souhaiterais savoir comment peut-on implémenter des threads en C++ de façon assez simple, et que le tout reste multi-plateforme ?
Dans une exemple, vous voyez SecondThreadFunc() est un thread nous voulons le lancer dans un second thread.
Il a dit multi-plateforme, à ce qu'il me semble. Or, ce que tu
Pour multi-platform, remplacez "beginthreadex()" par "Spawn()"
"James Kanze" <james.kanze@gmail.com> wrote in message
news:1163523266.859325.12080@h48g2000cwc.googlegroups.com...
Venus²² wrote:
"gg" <gg@voila.Fr> wrote in message
news:453d1abe$0$25911$ba4acef3@news.orange.fr...
Je souhaiterais savoir comment peut-on implémenter des
threads en C++ de façon assez simple, et que le tout reste
multi-plateforme ?
Dans une exemple, vous voyez SecondThreadFunc() est un thread
nous voulons le lancer dans un second thread.
Il a dit multi-plateforme, à ce qu'il me semble. Or, ce que tu
Pour multi-platform, remplacez "beginthreadex()" par "Spawn()"
unsigned long thread = _beginthread(null, 0, ...);
// Wait until second thread has terminated. If you comment out the line // below, Counter will not be correct because the thread has not // terminated, and Counter most likely has not been incremented to // 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
vous mélangez ici 2 utilisations distinctes; un (process)thread créé par _beginthread n'est pas un handle pouvant être attendu/signalé. il aurait fallu ici une global "bool threadCompleted;" positionnée par SecondThreadFunc à la sortie du while() ou encore faire une lecture concurrentielle de Counter pour déterminer si la valeur max. est atteinte.
printf( "Counter should be 1000000; it is-> %dn", Counter );
// Destroy the thread object. CloseHandle( hThread );
re-non, le thread n'est pas un handle, vous confondez avec CreateThread() (également MS spécific) qui lui retourne un HANDLE pouvant être utilisé pour tuer le process d'autorité (TerminateThread()) et le surveiller/signaler (WaitForSingleObject() et CloseHandle()).
Sylvain.
Venus²² wrote on 14/11/2006 13:11:
Dans une exemple, vous voyez SecondThreadFunc() est un thread nous voulons
le lancer dans un second thread.
par paraphraser James, pas très portable tout cela ...
#include <windows.h>
ça commence mal question portabilité.
#include <stdio.h>
#include <process.h>
unsigned Counter;
jamais initialisé mais utilisé comme critère de sortie du 2nd thread!
unsigned long thread = _beginthread(null, 0, ...);
// Wait until second thread has terminated. If you comment out the line
// below, Counter will not be correct because the thread has not
// terminated, and Counter most likely has not been incremented to
// 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
vous mélangez ici 2 utilisations distinctes; un (process)thread créé par
_beginthread n'est pas un handle pouvant être attendu/signalé.
il aurait fallu ici une global "bool threadCompleted;" positionnée par
SecondThreadFunc à la sortie du while() ou encore faire une lecture
concurrentielle de Counter pour déterminer si la valeur max. est atteinte.
printf( "Counter should be 1000000; it is-> %dn", Counter );
// Destroy the thread object.
CloseHandle( hThread );
re-non, le thread n'est pas un handle, vous confondez avec
CreateThread() (également MS spécific) qui lui retourne un HANDLE
pouvant être utilisé pour tuer le process d'autorité (TerminateThread())
et le surveiller/signaler (WaitForSingleObject() et CloseHandle()).
unsigned long thread = _beginthread(null, 0, ...);
// Wait until second thread has terminated. If you comment out the line // below, Counter will not be correct because the thread has not // terminated, and Counter most likely has not been incremented to // 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
vous mélangez ici 2 utilisations distinctes; un (process)thread créé par _beginthread n'est pas un handle pouvant être attendu/signalé. il aurait fallu ici une global "bool threadCompleted;" positionnée par SecondThreadFunc à la sortie du while() ou encore faire une lecture concurrentielle de Counter pour déterminer si la valeur max. est atteinte.
printf( "Counter should be 1000000; it is-> %dn", Counter );
// Destroy the thread object. CloseHandle( hThread );
re-non, le thread n'est pas un handle, vous confondez avec CreateThread() (également MS spécific) qui lui retourne un HANDLE pouvant être utilisé pour tuer le process d'autorité (TerminateThread()) et le surveiller/signaler (WaitForSingleObject() et CloseHandle()).
Sylvain.
Alain Gaillard
Pour multi-platform, remplacez "beginthreadex()" par "Spawn()"
et WaitForSingleObject, on le remplace par quoi ?
-- Alain
Pour multi-platform, remplacez "beginthreadex()" par "Spawn()"
unsigned long thread = _beginthread(null, 0, ...);
// Wait until second thread has terminated. If you comment out the line // below, Counter will not be correct because the thread has not // terminated, and Counter most likely has not been incremented to // 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
vous mélangez ici 2 utilisations distinctes; un (process)thread créé par _beginthread n'est pas un handle pouvant être attendu/signalé. il aurait fallu ici une global "bool threadCompleted;" positionnée par SecondThreadFunc à la sortie du while() ou encore faire une lecture concurrentielle de Counter pour déterminer si la valeur max. est atteinte.
printf( "Counter should be 1000000; it is-> %dn", Counter );
// Destroy the thread object. CloseHandle( hThread );
re-non, le thread n'est pas un handle, vous confondez avec CreateThread() (également MS spécific) qui lui retourne un HANDLE pouvant être utilisé pour tuer le process d'autorité (TerminateThread()) et le surveiller/signaler (WaitForSingleObject() et CloseHandle()).
Sylvain.
Sylvain,
Comme j'ai dit, Spawn() est utilisé sous Windows et sous Linux, les rest n'est pas important, c'est pour lui montrer quelques choses de multi-platform. Windows est une part de multiplatform ailleurs. Il y a aussi Windows.h sous Linux, avez-vous donc les meilleurs exemples pour lui?
Venus²² /*
windows.h
Include this file if you wish to use the Windows32 API Library
Copyright (C) 1996 Free Software Foundation
Author: Scott Christley
Date: 1996
This file is part of the Windows32 API Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
If you are interested in a warranty or support for this source code,
contact Scott Christley for more information.
You should have received a copy of the GNU Library General Public
License along with this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
"Sylvain" <noSpam@mail.net> wrote in message
news:455a061b$0$27407$ba4acef3@news.orange.fr...
Venus²² wrote on 14/11/2006 13:11:
Dans une exemple, vous voyez SecondThreadFunc() est un thread nous
voulons le lancer dans un second thread.
par paraphraser James, pas très portable tout cela ...
#include <windows.h>
ça commence mal question portabilité.
#include <stdio.h>
#include <process.h>
unsigned Counter;
jamais initialisé mais utilisé comme critère de sortie du 2nd thread!
unsigned long thread = _beginthread(null, 0, ...);
// Wait until second thread has terminated. If you comment out the
line
// below, Counter will not be correct because the thread has not
// terminated, and Counter most likely has not been incremented to
// 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
vous mélangez ici 2 utilisations distinctes; un (process)thread créé par
_beginthread n'est pas un handle pouvant être attendu/signalé.
il aurait fallu ici une global "bool threadCompleted;" positionnée par
SecondThreadFunc à la sortie du while() ou encore faire une lecture
concurrentielle de Counter pour déterminer si la valeur max. est atteinte.
printf( "Counter should be 1000000; it is-> %dn", Counter );
// Destroy the thread object.
CloseHandle( hThread );
re-non, le thread n'est pas un handle, vous confondez avec CreateThread()
(également MS spécific) qui lui retourne un HANDLE pouvant être utilisé
pour tuer le process d'autorité (TerminateThread()) et le
surveiller/signaler (WaitForSingleObject() et CloseHandle()).
Sylvain.
Sylvain,
Comme j'ai dit, Spawn() est utilisé sous Windows et sous Linux, les rest
n'est pas important, c'est pour lui montrer quelques choses de
multi-platform. Windows est une part de multiplatform ailleurs. Il y a
aussi Windows.h sous Linux, avez-vous donc les meilleurs exemples pour lui?
Venus²²
/*
windows.h
Include this file if you wish to use the Windows32 API Library
Copyright (C) 1996 Free Software Foundation
Author: Scott Christley <scottc@net-community.com>
Date: 1996
This file is part of the Windows32 API Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
If you are interested in a warranty or support for this source code,
contact Scott Christley <scottc@net-community.com> for more information.
You should have received a copy of the GNU Library General Public
License along with this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
unsigned long thread = _beginthread(null, 0, ...);
// Wait until second thread has terminated. If you comment out the line // below, Counter will not be correct because the thread has not // terminated, and Counter most likely has not been incremented to // 1000000 yet.
WaitForSingleObject( hThread, INFINITE );
vous mélangez ici 2 utilisations distinctes; un (process)thread créé par _beginthread n'est pas un handle pouvant être attendu/signalé. il aurait fallu ici une global "bool threadCompleted;" positionnée par SecondThreadFunc à la sortie du while() ou encore faire une lecture concurrentielle de Counter pour déterminer si la valeur max. est atteinte.
printf( "Counter should be 1000000; it is-> %dn", Counter );
// Destroy the thread object. CloseHandle( hThread );
re-non, le thread n'est pas un handle, vous confondez avec CreateThread() (également MS spécific) qui lui retourne un HANDLE pouvant être utilisé pour tuer le process d'autorité (TerminateThread()) et le surveiller/signaler (WaitForSingleObject() et CloseHandle()).
Sylvain.
Sylvain,
Comme j'ai dit, Spawn() est utilisé sous Windows et sous Linux, les rest n'est pas important, c'est pour lui montrer quelques choses de multi-platform. Windows est une part de multiplatform ailleurs. Il y a aussi Windows.h sous Linux, avez-vous donc les meilleurs exemples pour lui?
Venus²² /*
windows.h
Include this file if you wish to use the Windows32 API Library
Copyright (C) 1996 Free Software Foundation
Author: Scott Christley
Date: 1996
This file is part of the Windows32 API Library.
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
If you are interested in a warranty or support for this source code,
contact Scott Christley for more information.
You should have received a copy of the GNU Library General Public
License along with this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
Sylvain
Venus²² wrote on 14/11/2006 19:39:
merci de quoter correctement (inutile d'inclure ce qui est inutile).
Comme j'ai dit, Spawn() est utilisé sous Windows et sous Linux, les rest n'est pas important, c'est pour lui montrer quelques choses de multi-platform.
je n'ai pas commenté "Spawn" (votre 2nd post) mais bien le 1ier où à peu près tout était, dirons-nous, approximatif; quitte à vouloir montrer, autant le faire avec du code valide et non des erreurs sur les APIs utilisées.
Windows est une part de multiplatform ailleurs.
je ne comprends pas cette ""phrase"". Windows est une des plate-formes existantes, soit, écrire du code que pour windows est une possibilité, re-soit; si la question est quelles APIs garantissent la portabilité des threads, la seule réponse est aucune.
Il y a aussi Windows.h sous Linux
?!? pour définir tous les (ignobles) define de MS ? et alors, les librairies que vous avez utilisé ne sont pas dispo. (windows.h ne définit en soi aucune fonction).
Sylvain.
Venus²² wrote on 14/11/2006 19:39:
merci de quoter correctement (inutile d'inclure ce qui est inutile).
Comme j'ai dit, Spawn() est utilisé sous Windows et sous Linux, les rest
n'est pas important, c'est pour lui montrer quelques choses de
multi-platform.
je n'ai pas commenté "Spawn" (votre 2nd post) mais bien le 1ier où à peu
près tout était, dirons-nous, approximatif; quitte à vouloir montrer,
autant le faire avec du code valide et non des erreurs sur les APIs
utilisées.
Windows est une part de multiplatform ailleurs.
je ne comprends pas cette ""phrase"".
Windows est une des plate-formes existantes, soit, écrire du code que
pour windows est une possibilité, re-soit; si la question est quelles
APIs garantissent la portabilité des threads, la seule réponse est aucune.
Il y a aussi Windows.h sous Linux
?!? pour définir tous les (ignobles) define de MS ? et alors, les
librairies que vous avez utilisé ne sont pas dispo. (windows.h ne
définit en soi aucune fonction).
merci de quoter correctement (inutile d'inclure ce qui est inutile).
Comme j'ai dit, Spawn() est utilisé sous Windows et sous Linux, les rest n'est pas important, c'est pour lui montrer quelques choses de multi-platform.
je n'ai pas commenté "Spawn" (votre 2nd post) mais bien le 1ier où à peu près tout était, dirons-nous, approximatif; quitte à vouloir montrer, autant le faire avec du code valide et non des erreurs sur les APIs utilisées.
Windows est une part de multiplatform ailleurs.
je ne comprends pas cette ""phrase"". Windows est une des plate-formes existantes, soit, écrire du code que pour windows est une possibilité, re-soit; si la question est quelles APIs garantissent la portabilité des threads, la seule réponse est aucune.
Il y a aussi Windows.h sous Linux
?!? pour définir tous les (ignobles) define de MS ? et alors, les librairies que vous avez utilisé ne sont pas dispo. (windows.h ne définit en soi aucune fonction).
Sylvain.
Serge Paccalin
Le mardi 14 novembre 2006 à 19:08:34, Sylvain a écrit dans fr.comp.lang.c++ :
_endthreadex( 0 ); return 0;
mets simplement AX à 0, cela ne confusera pas l'appelant (heureusement) qui n'attendait aucune valeur de retour.
Oui. Ne pas appeler endthread ou endthreadex() en C++ ; cela provoque une sortie immédiate de la fonction, donc court-circuite les appels aux destructeurs des objets locaux...
void main()
Personne ne dit rien, là, dans un groupe consacré au C++ ?
-- ___________ _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Pour bien répondre avec Google, ne pas cliquer -'(__) « Répondre », mais « Afficher les options », _/___(_) puis cliquer « Répondre » (parmi les options).
Le mardi 14 novembre 2006 à 19:08:34, Sylvain a écrit dans
fr.comp.lang.c++ :
_endthreadex( 0 );
return 0;
mets simplement AX à 0, cela ne confusera pas l'appelant (heureusement)
qui n'attendait aucune valeur de retour.
Oui. Ne pas appeler endthread ou endthreadex() en C++ ; cela provoque
une sortie immédiate de la fonction, donc court-circuite les appels aux
destructeurs des objets locaux...
void main()
Personne ne dit rien, là, dans un groupe consacré au C++ ?
--
___________
_/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net
_L_) Pour bien répondre avec Google, ne pas cliquer
-'(__) « Répondre », mais « Afficher les options »,
_/___(_) puis cliquer « Répondre » (parmi les options).
Le mardi 14 novembre 2006 à 19:08:34, Sylvain a écrit dans fr.comp.lang.c++ :
_endthreadex( 0 ); return 0;
mets simplement AX à 0, cela ne confusera pas l'appelant (heureusement) qui n'attendait aucune valeur de retour.
Oui. Ne pas appeler endthread ou endthreadex() en C++ ; cela provoque une sortie immédiate de la fonction, donc court-circuite les appels aux destructeurs des objets locaux...
void main()
Personne ne dit rien, là, dans un groupe consacré au C++ ?
-- ___________ _/ _ _`_`_`_) Serge PACCALIN -- sp ad mailclub.net _L_) Pour bien répondre avec Google, ne pas cliquer -'(__) « Répondre », mais « Afficher les options », _/___(_) puis cliquer « Répondre » (parmi les options).