ich habe derzeit ein sehr seltsames Problem für das ich keine Erklärung habe:
Ich erstelle einen Thread der mir rekursiv ein Verzeichnis durchläuft und erstellt für jede Datei ein QRunnable das von QThreadPool abgearbeitet wird. In diesen QRunnable's wird ein SHA1 Hash von der Datei berechnet.
Das Problem ist, dass ich lange nicht die maximale Leistung eines Rechners damit Auslasten kann. Auf einem alten AMD XP 3000 single Core kriege ich gerade mal ~65% CPU Auslastung hin bei ca. 40MB/s (meine Platte schafft 65MB/s und andere Hash-Tools nutzen dies auch aus)
Warum fährt hier Qt mit angezogener Handbremse?
Hier der Code aus dem QRunnable:
Code: Alles auswählen
void ShareHasherPrivate::run()
{
QFile file(m_filePath);
if(!file.open(QIODevice::ReadOnly)) return;
QCryptographicHash hash(QCryptographicHash::Sha1);
static char buffer[SHA1_BUFFER_SIZE];
qint64 result = 0;
while(!file.atEnd())
{
result = file.read(buffer, SHA1_BUFFER_SIZE);
hash.addData(buffer, result);
}
file.close();
}