2010-04-20 4 views
0

J'ai cherché des exemples sur la façon de créer une application multithread simple qui fait quelque chose de similaire à ceci:C++ WIN32: exemple multitâches court

#include <iostream> 
using namespace std; 
int myConcurrentFunction() 
{ 
    while(1) 
    { 
     cout << "b" << endl; 
    } 
} 
int main() 
{ 
    // Start a new thread for myConcurrentFunction 
    while(1) 
    { 
     cout << "a" << endl; 
    } 
} 
  • Comment puis-je obtenir le plus haut à la sortie a et b « au hasard "en commençant un nouveau fil au lieu de simplement appeler myConcurrentFunction normalement?

Je veux dire: Quel est le code minimal pour cela? Est-ce vraiment une seule fonction que je dois appeler? Quels fichiers dois-je inclure?

J'utilise MSVC 2010, Win32

Répondre

3

Le plus simple est _beginthread. Il suffit de se concentrer sur la façon dont ils créent le fil dans leur exemple, ce n'est pas aussi compliqué qu'il n'y paraît à première vue.

#include <iostream> 
#include <process.h> 

using namespace std; 
void myConcurrentFunction(void *dummy) 
{ 
    while(1) 
    { 
     cout << "b" << endl; 
    } 
} 

int main() 
{ 
    _beginthread(myConcurrentFunction, 0, NULL); 
    while(1) 
    { 
     cout << "a" << endl; 
    } 
} 
+0

+1 IVlad, bonne réponse. –

1

C'est plus compliqué que cela. Pour un, la fonction thread doit retourner un DWORD et prendre un paramètre LPVOID.

Jetez un coup d'œil au MSDN code from pour plus de détails.

+0

Ne semble pas si compliqué selon IVlads répondre .. –

+0

oui son est beaucoup plus simple. Utilisez celui-là, sauf si vous écrivez C. pur: D –

-2

BTW, pourquoi enfiler quand vous avez juste besoin de saupoudrer au hasard de 'a' & 'b'. Int randomSprinkling() { char val [2] = {'a', 'b'};

int i = 0; 
while(++i < 100 ) 
{ 
    std::cout << val[rand()%2] << std::endl; 
} 
return 0; 

}

+0

Ha ha, votre esprit n'est pas le plus rapide hein? Ou vous êtes un troll ... Vous avez lu le titre de la question? Multitâche? –

+2

Courant @: Je ne pense pas que vous devez être si méchant pour le répondeur. – Maulrus

+0

En parlant de pêche à la traîne, appelez-vous souvent les gens stupides quand ils essaient de vous aider? Signalé votre commentaire comme offensant. S'il vous plaît gardez à l'esprit que ce n'est pas un jardin d'enfants. – jalf