2016-08-04 4 views
0

Ich habe dieses obskure Problem seit 2 Tagen: Ich erstellte eine Start-at-Boot-Anwendung in C++ auf einem Debian-System, das einwandfrei funktionierte, bis ich einige Multithreading-Elemente integriert.Multithread-Anwendung bei Boot-Sequenz - C++/Debian

  • Es gibt nur 2 Fäden (1 Haupt- und 1 Kind)
  • I enthalten -lpthread und -pthread in der Make-Datei
  • ich versucht, beide /.config/autostart und die Datei .desktop Methoden (gleiche Ergebnis)
  • das Programm wird mit sudo lanched
  • Es ist kein Fehler/Absturz überall, der Haupt-Thread arbeitet in Ordnung, aber der Kind Thread läuft 1 Iteration stoppt nur dann aus irgendeinem Grunde
  • hat sogar versucht, etwas Schlaf in der Bootsequenz lxsession hinzuzufügen
  • Wenn ich die gleiche Befehlszeile als in der Autostart-Datei in einem Terminal (sudo oder nicht) starten, funktioniert es perfekt.

Es war 2 Tage und ich habe nur keinen Hinweis! Wenn jemand das vorher erfahren hat oder eine Logik darin finden kann, werde ich immer dankbar sein.

+0

Haben Sie vergessen, Fehlercodes zu überprüfen? Stoppt oder stoppt der Thread? – James

+0

Wirklich nichts kommt aus dem Terminal. Es läuft einfach. Gibt es einen anderen Ort, um Fehlercodes zu sehen? – Binarynam

+0

@Binarynam Läuft Ihr Programm korrekt, wenn es beim Booten nicht gestartet wird? – N0un

Antwort

0

Vielen Dank für Ihre Anregungen.

ich ein "fix" gefunden: das Startprogramm in einem Terminal ('@lxterminal -e url/to/Programm &' in Autostart von lxsession) statt Hintergrund laufen scheint es irgendwie zu beheben. Es gibt jedoch keine GUI ... es ist ein Service.

Die Multithread-Logik ist hier nicht fehlerhaft, nicht mein erster Schuss, und ich möchte diese Funktion wirklich behalten (@Mike Robinson).

Ich werde die Verwendung von Sudo wie vorgeschlagen, die skizzenhaft scheint alles überdenken. Es könnte es im Hintergrund laufen. danke @ datenwolf.

0

Es scheint mir, dass Sie einfach ... einen Fehler in Ihrer neuen Logik haben. Sie haben beim Entwerfen Ihrer Multithreading-Logik einen Fehler gemacht, sodass der untergeordnete Thread nur eine Iteration ausführt. (Oder, viel wahrscheinlicher, Stände in einem unendlichen warten. Wartet auf ein Ereignis, das nie signalisiert wird, ein Semaphor, das nie ausgelöst wird, eine Warteschlange, die trocken läuft und nie gefüllt wird, und so weiter.)

Wir können Ihnen weiter helfen, wenn Sie Auszüge des fraglichen Codes veröffentlichen ... nur illustrierend wie der untergeordnete Thread gestartet wird und wie er mit dem übergeordneten Thread interagiert. (Condition-Variablen, Semaphore und so weiter, das ist wahrscheinlich der Kern Ihres Fehlers liegt.)

Ich würde vorschlagen, dass "all die anderen Sachen irrelevant ist." Sie benötigen keinen "Schlaf in der Boot-Sequenz" (wenn die Sequenz auf das Ende Ihres Programms wartet, und, falls erforderlich). Ich schlage vor, dass es mir scheint, dass Sie einfach einen Bug in Ihrem neuen Code haben, der Multithreading einführt.

Und Sie könnten darüber nachdenken, ob Multi-Threading ist vorteilhaft, vorausgesetzt, Sie hatten eine nicht-Thread-Version der gleichen Sache, die richtig funktioniert. Wenn die zu bearbeitende Verarbeitung (erfolgreich) von einem einzelnen Thread durchgeführt wurde, kann eine solche Verarbeitung möglicherweise vorteilhafter durch "n Threads" verarbeitet werden. Sollte Sie diesen Fehler finden und beheben, oder ist es genauso gut, die Änderung aufzugeben und zu dem zurückzukehren, was funktioniert hat? Nur Sie können entscheiden, dass ...

Verwandte Themen