Failed to create thread (Der Zugriffscode ist unzulässig.)

Alles rund um die Programmierung mit Qt
Antworten
th3AddY
Beiträge: 11
Registriert: 7. Februar 2013 07:07

Failed to create thread (Der Zugriffscode ist unzulässig.)

Beitrag von th3AddY »

Hallo zusammen,

Ich habe ein Programm, das auf mehreren Threads gleichzeitig bestimmte Tasks abarbeiten soll. Von diesen Tasks kann es mehrere tausend geben. Es laufen jedoch immer nur eine bestimmte Anzahl Threads gleichzeitig. (QThread::idealThreadCount())

Sobald ein Thread beendet ist, wird dieser aus dem Speicher entfernt und ein neuer gestartet mit der nächsten eingereihten Task. Dies funktioniert eine Weile wunderbar. Jedoch taucht auf einmal willkürlich diese Fehlermeldung beim Starten eines neuen Threads auf:

Code: Alles auswählen

QThread::start: Failed to create thread (Der Zugriffscode ist unzulässig.)
Das Aufräumen eines Threads habe ich folgendermaßen realisiert:

Code: Alles auswählen

connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
Was genau bedeutet diese Fehlermeldung und wie könnte man das Problem lösen?

Viele Grüße,
Daniel

PS: Ich benutze Qt 5.0.1
bmann
Beiträge: 14
Registriert: 22. Juni 2006 22:27
Wohnort: Dortmund

Re: Failed to create thread (Der Zugriffscode ist unzulässig

Beitrag von bmann »

Hi,

also schauen wir mal, die Fehlermeldung "Failed to create thread" findet sich in Qt nur in qthread_win.cpp, du arbeitest also unter Windows (warum sagst du sowas denn nicht??). Der Teil "Der Zugriffscode ist unzulässig" ist die Fehlermeldung, die die _beginthreadex() Funktion von Windows wirft (leider in deutsch, das macht es schwierig zu googeln, ist offenbar Fehlercode 12, ERROR_INVALID_ACCESS, "The access code is invalid").
Für weiteres müsste ich raten, da MSDN bei _beginthreadex() nicht so wirklich schreibt warum die fehlschlagen kann und mir die Erfahrung unter Windows fehlt.

Generell ist es jedoch imho schlechter Stil viele Threads zu starten und zu beenden. Besser: Threads wiederverwenden. Evtl. triffst du grade dieses Problem:
http://stackoverflow.com/questions/1775 ... inthreadex
d.h. du kannst schlicht keine weiteren Threads mehr erstellen. Ist aber nur eine Vermutung, zuverlässig sagen kann ich das nicht - aber da du "mehrere Tausend" Task haben kannst und für jeden einen neuen Thread startest, dürfte das passen.
Kannst du deine Tasks relativ einfach als QRunnable in QThreadPool umsetzen? Das sollte dein Problem beheben.

Gruß
Andi
Antworten