Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何同时运行两个线程?Qt C++;_C++_Multithreading_Qt_Queue_Simultaneous - Fatal编程技术网

C++ 如何同时运行两个线程?Qt C++;

C++ 如何同时运行两个线程?Qt C++;,c++,multithreading,qt,queue,simultaneous,C++,Multithreading,Qt,Queue,Simultaneous,我的任务是模拟瓶装过程 有一个人负责把“瓶子”排在队列里。例如,他的速度是每秒1瓶。我是用一根线做的。但问题是,必须有第二个线程,这将是一台机器,负责将这些“瓶子”取出队列,然后将它们放入另一个队列 为此,我在“main”函数中创建了队列和线程。然后我启动了线程,作为参数,我进入了刚刚创建的队列。这样,线程(在本例中为person)将把“瓶子”放入作为参数传递的队列中 然后,当程序运行时,is会工作,但不会像它应该的那样工作。 第一个线程(人)开始将元素放入队列,当它完成时,第二个线程(机器)开

我的任务是模拟瓶装过程

有一个人负责把“瓶子”排在队列里。例如,他的速度是每秒1瓶。我是用一根线做的。但问题是,必须有第二个线程,这将是一台机器,负责将这些“瓶子”取出队列,然后将它们放入另一个队列

为此,我在“main”函数中创建了队列和线程。然后我启动了线程,作为参数,我进入了刚刚创建的队列。这样,线程(在本例中为person)将把“瓶子”放入作为参数传递的队列中

然后,当程序运行时,is会工作,但不会像它应该的那样工作。 第一个线程(人)开始将元素放入队列,当它完成时,第二个线程(机器)开始移除队列的元素

我想让我的程序同时执行这两个任务,这意味着一旦个人(第一个线程)开始将元素放入队列,机器(第二个线程)就开始将它们从队列中移除

以下是我的一些代码:

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);
}
}
void Thread::queue(queue*c)
{
对于(int i=0;i<10;i++)
{
c->push(i);
coutpop();
这->睡眠(2);
}
}
你知道这两个线程如何同时工作吗?
感谢您的帮助和想法,我非常感谢。

您实际上根本没有使用线程。我从未使用过Qt,所以我不能(或不会)尝试修复整个程序,但根据文档,您必须有一个线程才能使其运行。然后它将执行它的方法,您必须实现它——您的循环可能应该进入这个“run”方法

您要做的是创建休眠线程对象,然后从主线程调用线程函数。线程从不运行,方法在主线程上按顺序运行


为了实现正确的操作,您可能必须保护对队列的访问,因此一次只能有一个线程使用它(除非队列是线程安全的,但大多数库都不这样做)。对于一些额外的研究,像您正在创建的消息传递队列通常受到条件锁的保护,因为这允许执行诸如“等待队列中有东西”之类的操作。

您实际上根本没有使用线程。我从未使用过Qt,所以我不能(或不会)尝试修复整个程序,但根据文档,您必须有一个线程才能使其运行。然后它将执行它的方法,您必须实现它——您的循环可能应该进入这个“run”方法

您要做的是创建休眠线程对象,然后从主线程调用线程函数。线程从不运行,方法在主线程上按顺序运行


为了实现正确的操作,您可能必须保护对队列的访问,因此一次只能有一个线程使用它(除非队列是线程安全的,但大多数库都不这样做)。对于一些额外的研究,消息传递队列(如您正在创建的队列)通常受到条件锁的保护,因为条件锁允许执行诸如“等待队列中有东西”之类的操作。

您试图实现的是生产者-消费者。我的建议是完全忘记您所做的事情,开始阅读文档:,事实证明您完全跳过了文档


也考虑阅读这个,这是一个QT,几乎与你所需要的相同。

< P>你想实现的是生产者消费者。我的建议是完全忘记您所做的事情,开始阅读文档:,事实证明您完全跳过了文档


也考虑阅读这篇文章,这是一个Qt,几乎与你所需要的相同。

刚刚命名一个类“<代码>线程< /代码>”并不能使它成为多线程。尝试使用适当的多线程。您使用什么来保护堆栈不受并发访问?你不应该有一些互斥来保护队列吗?仅仅命名一个类“
Thread
”并不能使它成为多线程的。尝试使用适当的多线程。您使用什么来保护堆栈不受并发访问?你不应该有一些互斥来保护队列吗?