Tcl Crash bei Aktion in anderem Thread

Fragen zu Tkinter.
Antworten
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Habe Tcl/Tk from Source installiert. Und damit läuft jetzt auch tkinter. Aber wenn ich in irgendeinem anderen Thread nur das Geringste tue - da reicht bereits eine Konsoleneingabe mit input, dann crasht Tcl bereits:

Code: Alles auswählen

error in background error handler:
out of stack space (infinite loop?)
    while executing
"::tcl::Bgerror {out of stack space (infinite loop?)} {-code 1 -level 0 -errorcode NONE -errorinfo {out of stack space (infinite loop?)
    ("after" sc..."

Normalerweise sollte ja die Standardkonfiguration multithreaded sein.
Muss ich da etwas bei der Konfiguration berücksichtigen?

Nö, selber Fehler gemacht, Standard ist shared und nicht multithreaded

Aber da bekomme ich wieder eine Fehlermeldung:

Code: Alles auswählen

/usr/bin/ld: error: hidden symbol 'TclpThreadGetStackSize' is not defined locally
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Erster Fehler ist ein Stacküberlauf, vmtl. ruft sich der error handler rekursiv auf.

Zweiter Fehler klingt nach fehlendem Threadsupport.

Was zur besseren Problemabschätzung helfen könnte - minimales lauffähiges Bsp., bei welchem Dein Kompilat baden geht, hier posten, nicht nur die kryptischen Fehlermeldungen.

Wenn mich nicht alles täuscht, hat Tk Probleme mit multithreading.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@jerch Nein tcl hat keine Probleme mit multithreading. Wenn ich es mit multithreading konfiguriere ./configure --enable-threads, dann findet der Compiler auf meinem System nicht 'TclpThreadGetStackSize'.
Das sollte eigentlich /usr/bin/ld liefern. Aber auf manchen Unix Systemen wurde diese Angabe beseitigt und tcl will sie haben. Da gab es mal die Anweisung, das zu beseitigen. Aber anscheinend ist man davon bei tcl wieder abgekommen.

Und ich habe auf meinem MK808B Rechner kein Ubuntu, sondern ein abgespecktes Picuntu. Dann muss ich eben auf Multithreading mit tkinter auf diesem System verzichten. Und wenn ich mit Multithreading etwas machen will, nimm ich eben meinen PC.

Aber immerhin habe ich auf diesem Rechner jetzt auch tkinter:
Bild
Weißt Du, mit diesem Rechner arbeite ich lieber als mit dem PC. Ist vollkommen lautlos, braucht wenig Strom und hat ein gutes Bild über HDMI, während mein PC noch über RGB geht.
Hauptspeicher haben meine Rechner gleich viel, nämlich 1GB.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Hast Du die Lib mit -pthread gelinkt?
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

jerch hat geschrieben:Hast Du die Lib mit -lpthread gelinkt?
Nö, wie muss ich das machen? Mit make? Und welche Lib?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Du musst doch irgendwie die shared libs für tcl, tk und tkinter gebaut haben. Wie hast Du das denn gemacht?
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

jerch hat geschrieben:Du musst doch irgendwie die shared libs für tcl, tk und tkinter gebaut haben. Wie hast Du das denn gemacht?
Naja, ich habe aufgerufen für tcl:

./configure
make
sudo make install

Und für tk:

./configure
make
make test
sudo make install

Und auf diese Art und Weise habe ich dann auch Python neu installiert and dabei aber angegeben:

./configure --enable-shared --prefix=/usr/local LDFLAGS="-Wl,--rpath=/usr/local/lib"

Ohne diese Angabe hätte python nicht in das richtige Verzeichnis für die libs geschaut.
Zuletzt geändert von Alfons Mittelmeyer am Dienstag 8. September 2015, 19:26, insgesamt 1-mal geändert.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Also hast Du keine shared oder threaded Schalter gesetzt? Da hast Du Tcl wahrscheinlich single threaded standalone gebaut.

Evtl. hilft es im python-tk Debianpaket zu schauen, wie die flags der Buildschritte genau sein müssen.
Zuletzt geändert von jerch am Dienstag 8. September 2015, 19:29, insgesamt 1-mal geändert.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

jerch hat geschrieben:Also hast Du keine shared oder threaded Schalter gesetzt? Da hast Du Tcl wahrscheinlich single threaded standalone gebaut.
Nö shared ist default. Mit nicht threaded funktioniert es auch - allerdings kann ich dann keine Threads verwenden, wenn ich tkinter verwende

Aber wenn ich konfiguriere: ./configure --enable-threads

Dann geht der nachfolgende make schief, weil er TclpThreadGetStackSize nicht findet

Ich weiss auch nicht, warum das überhaupt noch in der Source für tcl8.15 drin ist, sollte normalerweise schon 2008 herausgeworfen worden sein: http://www.rkeene.org/projects/tcl/tcl. ... b63a?sbs=0

Vielleich muss ich das dann manuell aus den Sourcen rauswerfen?
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Problem gelöst.

Hab tcl/tk 8.6.4 installiert und jetzt geht das auch mit Threads
Antworten