QT의 사용 QMutex/QMutexLocker 상호 배율 동기화 스레드의 작은 예
3236 단어 QT
먼저, Qt 홈페이지 QThreads general usage 소개를 살펴보면 그 중 한 부분은 기본적으로 그 사용 방법을 소개했는데 다음과 같다.
The main thing in this example to keep in mind when using a QThread is that it's not a thread. It's a wrapper around a thread object. This wrapper provides the signals, slots and methods to easily use the thread object within a Qt project. To use it, prepare a QObject subclass with all your desired functionality in it. Then create a new QThread instance, push the QObject onto it using moveToThread(QThread*) of the QObject instance and call start() on the QThread instance. That's all. You set up the proper signal/slot connections to make it quit properly and such, and that's all.
지금 바로 표를 파는 작은 예:
Step1. Qt에서 설명한 사용법: 먼저 QObject를 계승하는 클래스를 만들고 실행할 함수를 안에 포장한다.
.h 파일 코드는 다음과 같습니다.
#ifndef TICKETSELLER_H
#define TICKETSELLER_H
#include
#include
#include
#include
class TicketSeller : public QObject
{
public:
TicketSeller();
~TicketSeller();
public slots:
void sale();
public:
int* tickets;
QMutex* mutex;
std::string name;
};
#endif // TICKETSELLER_H
.cpp 파일 코드는 다음과 같습니다.
#include "ticketseller.h"
#include
TicketSeller::TicketSeller()
{
tickets = 0;
mutex = NULL;
}
TicketSeller::~TicketSeller()
{
}
void TicketSeller::sale()
{
while((*tickets) > 0)
{
mutex->lock();
std::cout << name << " : " << (*tickets)-- << std::endl;
mutex->unlock();
}
/*while((*tickets) > 0)
{
QMutexLocker locker(mutex);
std::cout << name << " : " << (*tickets)-- << std::endl;
locker.unlock();
}*/
}
Step2. Qt에서 설명한 사용법에 따라 예를 만들고 moveToThread를 사용하여 대상을 QThread 안으로 옮기고 신호 슬롯을 연결하고 start () 방법을 호출합니다.
main.cpp 파일 코드는 다음과 같습니다.
#include
#include
#include
#include
#include "ticketseller.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int ticket = 100;
QMutex mutex;
/* 1*/
// 1
QThread t1;
TicketSeller seller1;
// 1
seller1.tickets = &ticket;
seller1.mutex = &mutex;
seller1.name = "seller1";
//
seller1.moveToThread(&t1);
/* 2*/
// 2
QThread t2;
TicketSeller seller2;
seller2.tickets = &ticket;
seller2.mutex = &mutex;
seller2.name = "seller2";
//
seller2.moveToThread(&t2);
QObject::connect(&t1, &QThread::started, &seller1, &TicketSeller::sale);
QObject::connect(&t2, &QThread::started, &seller2, &TicketSeller::sale);
t1.start();
t2.start();
return a.exec();
}
QT에서 QMutex/QMutex Locker를 사용하는 것은 Window API Create Mutex와 WaitFor Single Object 동기화 라인을 맞추는 것보다 훨씬 간단합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간편한 채팅 시스템 - 메시지 전달 서버메시지 전송 서버는 메시지 대기열에서 온 데이터를 받아들여 디코딩, 식별 등을 하고 마지막으로 분류를 나눈다.예를 들어 채팅 시스템은 같은 그룹과 같은 세션의 정보를 같은 그룹 서비스로 전송한다(물론 아직 같은 그룹...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.