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.
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. –
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 –