我的任務是模擬灌裝過程。如何在同一時間運行兩個線程? Qt C++
有人負責將「瓶子」放入隊列中。例如他的速度是每秒1瓶。我用線程做了這個。但問題是,必須有第二個線程,這將是一個機器,負責將這些「瓶子」取出,然後將它們放入另一個隊列中。
我通過在'main'函數中創建隊列和線程來做到這一點。然後我開始了線程,並且作爲參數進入了我剛創建的隊列。通過這種方式,線程(在這種情況下,人)將把「瓶子」放入作爲參數傳遞的隊列中。
然後當程序運行時,是行得通的,但不是它應該的。 第一個線程(人)開始將元素放入隊列中,並在完成時,第二個線程(機器)開始移除隊列的元素。
我想要我的程序要做的是同時完成這兩個任務,這意味着只要人(第一個線程)開始將元素放入隊列中,機器(第二個線程)就開始移除他們從隊列中。
下面是我的一些代碼:
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Queue *queue1 = new Cola (""); // First queue
Thread *Person = new Thread(); // Person who is in charged of putting bottles
Thread *Machine = new Thread(); // Machine in charged of removing elements of the queue
Person->queue(queue1);
Machine->dequeue(queue1);
system("Pause");
return 0;
return a.exec();
}
,這裏是一些主題
void Thread::queue(queue *c)
{
for (int i = 0; i < 10; i++)
{
c -> push (i);
cout << "Inserting to the queue the: " << i << endl;
this -> sleep (1);
}
}
void Thread::dequeue(queue *c)
{
while (!c -> empty())
{
c -> pop();
this -> sleep (2);
}
}
的怎麼能這兩個線程同時工作,任何想法的代碼? 感謝您的幫助和想法,我真的很感激他們。
只是命名一個類「線程」並不會使其成爲多線程。嘗試使用[QThread](http://doc.qt.digia.com/stable/qthread.html)進行適當的多線程。 – Cornstalks
你用什麼來保護你的堆棧免受併發訪問?你不應該有一些互斥體來保護隊列嗎? – HeatfanJohn