내 임무는 bottler 프로세스를 시뮬레이션하는 것입니다.두 스레드를 동시에 실행할 수 있습니까? Qt C++
"병"을 대기열에 넣는 사람이 있습니다. 예를 들어 그의 속도는 초당 1 병입니다. 나는 실로 이것을했다. 하지만 문제는 두 번째 스레드가 있어야한다는 것입니다.이 머신은 이러한 "병"을 가져 와서 대기열에서 빼낸 다음 다시 다른 대기열에 넣는 기계입니다.
'main'함수에서 대기열과 스레드를 생성하여이 작업을 수행했습니다. 그런 다음 스레드를 시작하고 매개 변수로 방금 작성한 대기열을 입력했습니다. 이 방법으로 스레드 (이 경우, 사람)는 매개 변수로 전달 된 대기열에 "병"을 넣습니다.
그런 다음 프로그램을 실행하면 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);
}
}
이 두 스레드가 동시에 작업 할 수있는 방법에 어떤 아이디어 스레드
의 코드의 일부인가? 도움과 아이디어를 보내 주셔서 감사합니다. 정말 감사드립니다.
"Thread"클래스의 이름을 지정해도 다중 스레드되지 않습니다. 적절한 멀티 스레딩을 위해 [QThread] (http://doc.qt.digia.com/stable/qthread.html)를 사용해보십시오. – Cornstalks
스택을 동시 액세스로부터 보호하기 위해 무엇을 사용하고 있습니까? 대기열을 보호하기위한 뮤텍스가 없어야합니까? – HeatfanJohn