Threadprogrammierung unter Linux - Bleibt beim pollen hängen

Für allgemeine Fragen zur Programmierung, welche nicht! direkt mit Lazarus zu tun haben.
Antworten
soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Threadprogrammierung unter Linux - Bleibt beim pollen hängen

Beitrag von soerensen3 »

Hallo, ich habe ein Problem mit Threads unter Linux (In einer virtuellen Maschine mit Windows XP läuft es besser aber auch nicht perfekt).

Leider weiß ich nicht genau wie ich das Problem eingrenzen kann, wie ich das Problem reproduzieren kann oder an welchem Code es genau liegt. Daher lade ich mal die Unit, die die Threads abarbeitet in den Anhang.

Ich habe neben dem Hauptthread einen Nebenthread, der nacheinander Jobs abarbeitet, die man vom Hauptthread einreihen kann.
Wenn gerade keine Jobs da sind, pausiert sich der Nebenthread und wird bei neuen Jobs wieder aufgeweckt.
Dies habe ich sowohl mit Events, als auch Suspend versucht zu realisieren, leider ohne Erfolg.

Das Problem, was immer wieder auftritt ist, dass der Nebenthread immer hängenbleibt. Im Assemblerfenster zeigt er folgende Instruktion an, die ausgeführt wird:

Code: Alles auswählen

 
poll (29)
00007FFFF579281D 488b3c24                 mov    (%rsp),%rdi
 
Ich verwende sowohl Application.QueueAsyncCall (für das Ergebnis) und Synchronize (für das Arbeiten mit Bildern) im Execute Teil meines Jobs (Natürlich nur da wo ich es für absolut nötig halte).

Im Anhang ist wie gesagt die Unit, in der die Jobs abgearbeitet werden. Die dort deaktivierten Codezeilen zeigen meine unterschiedlichen Versuche das Problem zu lösen.
Vielleicht hat ja jemand eine Idee..

Gruß Johannes
Dateianhänge
imgjobs.pas
(2.21 KiB) 94-mal heruntergeladen

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Threadprogrammierung unter Linux - Bleibt beim pollen hä

Beitrag von corpsman »

hast du in der LPR datei die

Code: Alles auswählen

  cthreads,   
Unit aktiviert ? sonst gehen Threads unter Linux nicht
--
Just try it

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: Threadprogrammierung unter Linux - Bleibt beim pollen hä

Beitrag von soerensen3 »

Hallo, Danke für die Antwort.

Hab ich vergessen zu sagen. Ich habe auch cmem eingebunden.
Die unit befindet sich in einem Paket, indem ich UseCThreads gesetzt habe. Ich habe auch die Bedingungen zum Testen deaktiviert. Daran liegts leider nicht.
Der Fehler tritt auch ohne cmem auf.

Code: Alles auswählen

 
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  cmem,
  {$ENDIF}{$ENDIF} 
 

soerensen3
Beiträge: 104
Registriert: Fr 22. Jun 2012, 01:51
OS, Lazarus, FPC: Fedora-Linux 23 (Korora) Lazarus 1.6 FPC 3.0
CPU-Target: 64Bit
Wohnort: Bonn

Re: Threadprogrammierung unter Linux - Bleibt beim pollen hä

Beitrag von soerensen3 »

Der Code funktioniert jetzt!
Ich habe das die Unit zunächst umgeschrieben, sodass sie mit application.processmessages und ohne threads arbeitet und dann hats immernoch nicht funktioniert. Dann habe ich den Fehler an einer anderen Stelle im Programm gefunden, was vorher unmöglich war.
Wenn ich die jobs aber abbreche kommt noch eine Fehlermeldung aber den Grund dafür finde ich noch.

Antworten