2009-03-10 8 views
3

Je souhaite utiliser deux files d'attente dans lesquelles la première file d'attente placera les données dans la file d'attente et la seconde thread supprimera les données de la file d'attente. Quelqu'un peut-il m'aider à mettre en œuvre ceci dans VC++?Comment utiliser les threads et la file d'attente dans VC++

Je suis nouveau dans les threads et la file d'attente.

+0

Salut Dheer, mon exigence est il y a une fonction qui crée un fil et transmet les données pour un traitement ultérieur qui ressemble à vide MyFunc (données char *) { CreateThread (NULL, 0, build_data, (void *) données, 0, NULL); } Maintenant, je veux modifier le code ci-dessus. –

+0

Je souhaite introduire une classe de file d'attente et je souhaite créer deux threads afin que le 1er thread puisse appeler une fonction qui écrit les données dans la file d'attente et que le 2ème thread lit les données de la file d'attente. Veuillez présenter mutex si nécessaire. Pouvez-vous me dire comment implémenter ce qui précède dans VC++. Merci –

Répondre

2

C'est le problème producteur/consommateur, voici un implementation de celui-ci en C++

1

Voici quelques conseils et quelques exemples de code:

std::queue<int> data; // the queue 
boost::mutex access; // a mutex for synchronising access to the queue 
boost::condition cond; // a condition variable for communicating the queue state 

bool empty() 
{ 
    return data.empty(); 
} 

void thread1() // the consumer thread 
{ 
    while (true) 
    { 
    boost::mutex::scoped_lock lock(access); 
    cond.wait(lock, empty); 
    while (!empty()) 
    { 
     int datum=data.top(); 
     data.pop(); 

     // do something with the data 
    } 
    } 
} 

void thread2() // the producer thread 
{ 
    while (true) 
    { 
    boost::mutex::scoped_lock lock(access); 
    data.push_back(1); // guaranteed random by a fair dice roll 
    cond.notify_one();   
    } 
} 

int main() 
{ 
    boost::thread t1(thread1); 
    boost::thread t2(thread2); 
    t1.join(); 
    t2.join(); 

    return 0; 
} 

J'ai utilisé un queue du STL et threads , condition variables et mutexes de la bibliothèque Boost. Le truc en boost est à peu près ce qui va être dans le standard C++ library in a few yearsso it is good to be familiar with it.

J'ai seulement tapé le code, je n'ai aucun moyen de le tester. Vous trouverez probablement des bugs. C'est une bonne chose, le code fileté est difficile et la meilleure façon d'y arriver est de beaucoup de pratique.

+0

Salut, mon exigence est qu'il existe une fonction qui crée un thread et transmet les données pour un traitement ultérieur qui ressemble à void MyFunc (char * données) {CreateThread (NULL, 0, build_data, (void *) données, 0, NUL); } Maintenant je veux modifier le code ci-dessus –

+0

Je veux introduire une classe de file d'attente et vouloir créer deux threads afin que le 1er thread puisse appeler une fonction qui écrit les données dans la file d'attente et le 2ème thread lit les données de la file. S'il vous plaît introduire mutex si nécessaire. Pouvez-vous me dire comment implémenter ce qui précède dans VC++. Merci –

+0

Pas vraiment désolé, vous devriez probablement créer une nouvelle question qui comprend tout le code que vous avez actuellement. Je ne comprends pas vraiment l'exigence –

Questions connexes