Ich habe einen C++ Code einschließlich GUI, in dem ich eine zeitaufwändige Schleife für die Optimierung ausführen muss.QThread Grundlegende Verwendung in C++
class OptimizationAlgorith(data *data);
{
private:
var var1;
var var2;
public:
method1();
method2();
..
timeConsumingMethod(data);
}
dieses Bedürfnis in einer GUI-Klasse aufgerufen werden wie folgt vor:
class QRegistration: public QWidget
{
Q_OBJECT
private:
data *m_data;
QPushButton *m_button_run;
OptimizationAlgorithm *m_optimizationalgorithm;
WorkerThread *m_workerThread;
QThread *m_thread;
..
private slots:
void on_pushButton_run_clicked();
void registrationDone();
ich die timeConsumingMethod
in einen separaten Thread als Haupt-Thread verschieben müssen, so dass die GUI nicht freez tut, während timeConsumingMethod
ist Laufen. Ich habe eine neue Klasse „WorkerThread“ mit der offiziellen Dokumentation von Qt, gemacht, die wie folgt aussieht:
class WorkerThread : public QObject
{
Q_OBJECT
public:
WorkerThread(ApplicationData* data, QOptimizationAlgorithm * OptimizationAlgorithm);
~WorkerThread();
public slots:
void run(data* data);
signals:
void finished();
private slots:
private:
OptimizationAlgorithm *m_OptimizationAlgorithm;
ApplicationData *m_data;
}
Wie shoud ich jetzt meine run()
in WorkerThread
implementieren? Kann ich einfach schreiben:
void WorkerThread::run(data *m_data)
{
m_optimization.timeConsumingMethod(m_data);
emit finished();
}
oder muss ich die ganze Definition von timeConsumingMethod
in run()
kopieren? Warum Warum nicht?
Sie brauchen nicht 'run' Methode neu zu implementieren, wenn Sie ein„Arbeiter“Muster verwenden. Versuchen Sie, Qt-Dokumentation zu lesen, es gibt perfekte Beispiele. –
Sie müssen nicht die gesamte Definition von timeConsumingMethod kopieren, jeder Code, der in run() aufgerufen wird, wird im WorkerThread-Thread ausgeführt, um zu überprüfen, ob die QThread :: currentThreadId() -Funktion zum Abrufen der Thread-ID verwendet wird. – nikitoz