ich habe ein kleines Programm sowohl in C#, als auch in Qt geschrieben. Das Programm vergleicht die GUI-Performance der beiden "Sprachen". Das Qt-Programm scheint kaum mit der Belastung fertig zu werden und muss letzten Endes mit dem Taskmanager gekillt werden. Das C#-Programm-Fenster kann ich bewegen wie ich möchte und kann das Programm zum Schluss auch mit einem Klick auf das X beenden. Mache ich in Qt irgendetwas falsch, oder ist die GUI-Performance echt so schlecht?
Bitte keinen Fragen, warum ich so etwas brauche. Ich kann an dieser Stelle keine Konsole nehmen, weil auch noch andere Controls zum Einsatz kommen.
Nachfolgend der Quellcode:
C#-Programm:
Form1.cs
Code: Alles auswählen
using System;
using System.Threading;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Shown(object sender, EventArgs e)
{
Thread lMyThread = new Thread(MyThread);
lMyThread.Start();
}
private void MyThread()
{
while (true)
{
Invoke((MethodInvoker)(() => richTextBox1.AppendText("Foo" + Environment.NewLine)));
}
}
private void Form1_FormClosing(object sender, EventArgs e)
{
Environment.Exit(0);
}
}
}
Ausschnitt OutputWindow.cpp
Code: Alles auswählen
void OutputWindow::on_pushButton_clicked()
{
ui->pushButton->setVisible(false);
MyThread* lMyThread = new MyThread(ui->textEdit);
connect(lMyThread, SIGNAL(finished()), lMyThread, SLOT(deleteLater()));
lMyThread->start();
}
Code: Alles auswählen
#ifndef MYTHREAD_H
#define MYTHREAD_H
#include <QtCore>
#include <QThread>
#include <QTextEdit>
class MyThread : public QThread
{
Q_OBJECT
private:
QTextEdit* mTextEdit;
public:
MyThread(QTextEdit* parTextEdit);
protected:
void run();
};
#endif // MYTHREAD_H
Code: Alles auswählen
#include "MyThread.h"
MyThread::MyThread(QTextEdit* parTextEdit = NULL)
{
mTextEdit = parTextEdit;
}
void MyThread::run()
{
while(true)
{
QMetaObject::invokeMethod(mTextEdit, "append", Qt::QueuedConnection, Q_ARG(QString, "Foo"));
}
exec();
}