1
저는 현재 C++ 및 Qt 프레임 워크로 작은 응용 프로그램을 작성하려고합니다. 백그라운드 작업을 사용해야합니다. 작업자 코드의 마지막 개정판입니다.Qt 프레임 워크에서 작업자 생성을 올바르게 수정하십시오.
class Worker : public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = 0);
static void submitNewWorker() {
QThread *thread = new QThread;
Worker *worker = new Worker;
worker->moveToThread(thread);
connect(thread, SIGNAL(started()), worker, SLOT(do_work()));
connect(worker, SIGNAL(work_done()), worker, SLOT(deleteLater()));
connect(worker, SIGNAL(work_done()), thread, SLOT(quit()));
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
}
signals:
void work_done();
public slots:
void do_work()
{
// do a lot of stuff
emit work_done();
}
};
현재 작업자가 올바르게 구현되어 있습니까? 가능한 메모리 누수가 있습니까 (new Worker
std::bad_alloc
을 호출하면 QThread
개체가 누출 될 수 있음) 또는 스레드 버그가 있습니까?
데이터를 처리하고 종료 (화재 및 잊어 버리기)해야하는 작업자 클래스의 경우, QRunnable을 서브 클래 싱 한 다음 QThreadPool에 전달하는 것이 일반적입니다. 이 방법을 사용하면 오버 헤드가 적어 (연결이 필요하지 않음) Qt가 모든 스레딩 항목을 처리합니다. 문제 해결에 대해서만 걱정하면됩니다. – RobbieE