Linux gar nicht so flexibel

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Linux gar nicht so flexibel

Beitrag von GlassJoe »

ccode_new hat geschrieben:Hi GlassJoe!!!

So wie du das machst ist das schwer kritisch !!!

Repeat
Delay(5)
ForEver

Oh je!!!!

Hier mal eine "Thread umgehende" - Methode:
..
..
Hey Danke für den Code :allright: hab ihn unter Windoof schon gestestet, er arbeitet tatsächlich ohne Thread und macht das selbe wie meiner, ich weiß nur noch nicht wie :lol: ich teste den später auf den Linux Lappis, und versuche schlauer zu werden, was dieses AddWindowTimer und #PB_Event_Timer ist, und warum Canvas Gadget.

Also unter Windows funzt mein Thread Code schon seit 8 Jahren mit 0 CPU Last (selbst auf meinem ältesten Lappi Singlecore Lappi der die meiste Zeit auf 600mhz läuft komm ich nicht auf mehr als 1-2%)
desshalb finde ich meinen Code gar nicht kritisch :) ich hab sogar früher noch oft OpenWindow in Threads benutzt (bei den alten PB Versionen) und selbst das ging die meiste Zeit ohne Probleme :)

Ich hab auch unter Windows einen Proxy Scanner geschrieben der bis zu 50 Bots benutzt, und jeder Bot arbeitet als seperater Thread, gestartet werden die Bots über einen Bot Launcher der auch ein Thread ist, auch da keine Probleme, desshalb weiss ich echt nicht, was an einem Thread mit Delay drin so kritisch sein soll :o sonst schmeiss ich massig Code in Threads, und da oben im grunde nur eine kleine Schleife, die eine Funktion aufruft, die prüft ob ein Bild in der Zwischenablage ist.
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Linux gar nicht so flexibel

Beitrag von mk-soft »

Threads sind eigentlich auch kein problem. Verwende ich auch unter Windows und Linux, macOS
Delay im Thread sind auch richtig.
Vermute ein Problem mit den Cipboard und Thread Instanz bei Linux. Werde ich mal testen
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Linux gar nicht so flexibel

Beitrag von ccode_new »

mk-soft hat geschrieben:Vermute ein Problem mit den Cipboard und Thread Instanz bei Linux
Jo!

So läuft's (Delay's sind fiese "Alles-Stopper")

Code: Alles auswählen

;Version mit Thread !!!

Global CWin

Global btnGetClip, cvDrawImage

Global stop_supervise.b = 1, screenshot.b = 0

Global thread ;Dein Thread!

Global run1, run2, check_run

Global pic ;Das Bild!

UsePNGImageDecoder()
UseJPEGImageDecoder()
UseJPEG2000ImageDecoder()

Procedure CreateScreenshot()
  pic = GetClipboardImage(#PB_Any) ;Darf nicht innerhalb eines Threads genutzt werden.
  If IsImage(pic)
    If StartDrawing(CanvasOutput(cvDrawImage))
      ResizeImage(pic, GadgetWidth(cvDrawImage), GadgetHeight(cvDrawImage))
      DrawImage(ImageID(pic), 0, 0, GadgetWidth(cvDrawImage), GadgetHeight(cvDrawImage))
      StopDrawing()
    EndIf
    FreeImage(pic) ;Bitte nicht vergessen!
    ClearClipboard() ;SEHR WICHTIG !!! (Ohne geht unter Linux nicht!)
  EndIf 
EndProcedure

Procedure WatchForClipBoardImage(*bla)
  ;supervise_run=1
  
  Repeat
      ;Debug check_run
    If stop_supervise
      Break
    EndIf
    run2 = ElapsedMilliseconds()
    check_run = run2 - run1
    
    If check_run >= 500
      ;Ein Delay ohne Delay (Also kein endgültiger Programmstop)
      ;Das heißt: GetClipboardImage(..) hat jetzt wirklich Zeit und wird nicht blockiert.
      screenshot = 1
      run1 = ElapsedMilliseconds()
    EndIf
  ForEver
  
  ;supervise_run=0
  
EndProcedure

Procedure OpenCWin(x = 0, y = 0, width = 430, height = 310)
  CWin = OpenWindow(#PB_Any, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
  btnGetClip = ButtonGadget(#PB_Any, 10, 10, 410, 40, "Starte Clipboard-Image-Suche") ;Startet einen bring mir das evtl. Image -Thread
  cvDrawImage = CanvasGadget(#PB_Any, 10, 60, 410, 240)
EndProcedure

Procedure CWin_Events(event)
  If screenshot = 1
    CreateScreenshot() ;GetClipboardImage(..) wird hier getriggert.
    screenshot = 0
  EndIf
  
  Select event
    Case #PB_Event_CloseWindow
      RemoveWindowTimer(CWin, 123)
      ProcedureReturn #False
      
    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case btnGetClip
          If stop_supervise = 1
            stop_supervise = 0
            
            run1 = ElapsedMilliseconds()
            
            thread = CreateThread(@WatchForClipBoardImage(),0)

            SetGadgetText(btnGetClip, "Beende Clipboard-Image-Suche")
          ElseIf stop_supervise = 0
            stop_supervise = 1
            
            KillThread(thread)
            
            SetGadgetText(btnGetClip, "Starte Clipboard-Image-Suche")
          EndIf
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure

OpenCWin()
ClearClipboard()
Repeat
  ev = WindowEvent()
Until Not CWin_Events(ev)
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Linux gar nicht so flexibel

Beitrag von NicTheQuick »

Deine Funktion "WatchForClipBoardImage" verbraucht 100%, weil sie sich ohne Delay ständig im Kreis dreht und immer am arbeiten ist. Da sollte wenigstens ein Delay(10) rein, damit der Scheduler auch anderen Threads noch CPU-Leistung abgibt.
Bild
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

Re: Linux gar nicht so flexibel

Beitrag von matbal »

@ccode_new
Auch der Event-Loop in deinem Code lastet schon einen Kern voll aus.
Ich habe 50% CPU-Auslastung beim Nichts-Tun und 100% bei der Clipboard-Image-Suche auf meinem Dual-Core.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Linux gar nicht so flexibel

Beitrag von NicTheQuick »

Oha, das hab ich gar nicht gesehen. Ich musste schon was sagen, weil ich nur einen 100%-CPU-Loop gesehen habe. :-D
Bild
Benutzeravatar
GlassJoe
Beiträge: 108
Registriert: 11.06.2017 20:25
Computerausstattung: 2 x AMD Phenom II x4 945,2x Dell Latitude X300, Dell Latitude D410, Hp Compaq NC4400

Re: Linux gar nicht so flexibel

Beitrag von GlassJoe »

NicTheQuick hat geschrieben:Deine Funktion "WatchForClipBoardImage" verbraucht 100%, weil sie sich ohne Delay ständig im Kreis dreht und immer am arbeiten ist. Da sollte wenigstens ein Delay(10) rein, damit der Scheduler auch anderen Threads noch CPU-Leistung abgibt.
Also ich habs grade getestet, beide Codes von funzen zwar auch unter Linux, aber wie du schon sagtest ist da die Sache mit der CPU Last, wegen fehlendem Delay.

Und der 2. Code benutzt KillThread was ich eigentlich äusserst ungern benutze.

Meine Version funzt soweit, nur ist die CPU Last halt nicht so extrem gering wie unter Windows, und der Ram Verbrauch ist im Vergleich zu Windows einfach utopisch.

Vor allem wird die Oberfläche träge wenn ich den Delay Wert (der sich ja in einem Thread abspielt, der nicht auf Gadgets zugreift) erhöhe, und sobald ich die Überwachung von Bild-Daten in der Zwischenablage abschalte, geht nix mehr.

Die Automatische Erstellung von Bildern geht.

Sobald ich das Programm (benutzt den Tray) schliesse, kommt unten im Editor (Programm ist aber nicht abgestüzt, alles ist normal)

Code: Alles auswählen

[Warning] Gtk (MESSAGE): GtkDialog mapped without a transient parent. This is discouraged.
EDIT: Ich glaube es ist besser wenn wir das Prob hier weiter bequatschen, weil wir grade voll Off Topic sind :lol:

http://forums.purebasic.com/german/view ... 21&t=30232
https://www.geek.com/tech/a-commodore-6 ... s-1672510/
٩(̾●̮̮̃̾•̃̾)۶ __̴ı̴̴̡̡̡ ̡͌l̡̡̡ ̡͌l̡*̡̡ ̴̡ı̴̴̡ ̡̡͡|̲̲̲͡͡͡ ̲▫̲͡ ̲̲̲͡͡π̲̲͡͡ ̲̲͡▫̲̲͡͡ ̲|̡̡̡ ̡ ̴̡ı̴̡̡ ̡͌l̡̡̡̡.___٩(- ̮̮̃-̃)۶
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Linux gar nicht so flexibel

Beitrag von ccode_new »

Entschuldigung.

Ja das geht ja mal gar nicht.

Ich finde die Delay's (Sleep-Funktion) zwar manchmal fies und gemein, aber auch sehr nützlich.

Also bitte mit Delay's.

*
Die arme kleine CPU muss doch nicht mehr arbeiten als nötig.
Vor allem nicht wenn Sie (die CPU) dabei alles um sich herum vernachlässigt.
*

//Diese Aussage kann man (wenn man möchte) auch vermenschlichen.

Hier mit Delay's:

Code: Alles auswählen

;Version mit Thread !!!

#CWin = 0

#btnGetClip = 0
#cvDrawImage = 1

#bild = 0 ;Das Bild!

Global screenshot.b = 0
Global stop_supervise.b = 0
Global thread ;Dein Thread!

UsePNGImageDecoder()
UseJPEGImageDecoder()

Procedure CreateScreenshot()
  GetClipboardImage(#bild) ;Darf nicht innerhalb eines Threads genutzt werden.
  If IsImage(pic)
    If StartDrawing(CanvasOutput(#cvDrawImage))
      ResizeImage(#bild, GadgetWidth(#cvDrawImage), GadgetHeight(#cvDrawImage))
      DrawImage(ImageID(#bild), 0, 0, GadgetWidth(#cvDrawImage), GadgetHeight(#cvDrawImage))
      StopDrawing()
    EndIf
    FreeImage(#bild) ;Bitte nicht vergessen!
    ClearClipboard() ;SEHR WICHTIG !!! (Ohne geht unter Linux nicht!)
  EndIf 
EndProcedure

Procedure WatchForClipBoardImage(*bla)
  Repeat
    Delay(200)
    screenshot = 1
  ForEver
EndProcedure

Procedure OpenCWin(x = 0, y = 0, width = 430, height = 310)
  OpenWindow(#CWin, x, y, width, height, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
  ButtonGadget(#btnGetClip, 10, 10, 410, 40, "Starte Clipboard-Image-Suche") ;Startet einen bring mir das evtl. Image -Thread
  CanvasGadget(#cvDrawImage, 10, 60, 410, 240)
EndProcedure

Procedure CWin_Events(event)
  If screenshot
    CreateScreenshot() ;GetClipboardImage(..) wird hier getriggert.
    screenshot = 0
  EndIf
  Delay(10)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False
    Case #PB_Event_Gadget
      Select EventGadget()
        Case btnGetClip
          If stop_supervise = 0
            stop_supervise = 1
            thread = CreateThread(@WatchForClipBoardImage(),0)
            SetGadgetText(btnGetClip, "Beende Clipboard-Image-Suche")
          ElseIf stop_supervise = 1
            stop_supervise = 0
            KillThread(thread)
            SetGadgetText(btnGetClip, "Starte Clipboard-Image-Suche")
          EndIf
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure

OpenCWin()
ClearClipboard()
Repeat
  ev = WaitWindowEvent()
Until Not CWin_Events(ev)
Anbei:
Trotzdem darf die Funktion "GetClipboardImage()" unter Linux nicht in einem externen Thread stehen.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Linux gar nicht so flexibel

Beitrag von Sicro »

Vorteile bei Linux gegenüber Windows sehe ich bei folgenden Eigenschaften:


-- Paketverwaltung --

Zentraler und sehr sicherer Ort, um Programme zu installieren. Bei Windows geben sicherlich
viele Benutzer den Programm-Namen in Google ein und nehmen dann irgendeine Download-Seite,
die in Augenhöhe in der Suchergebnisliste erscheint. Nicht selten wurde das Download-Paket
von den Download-Portalen mit zusätzlicher Adware ausgestattet.

ALLE Programme werden von der Paketverwaltung aktuell gehalten. Bei Windows gibt es solch
eine zentrale Software-Verwaltung nicht, weshalb jede Software sich selbst um die eigene
Aktualität kümmern muss. Jede Software hat also ihre eigene Prüf- und Update-Funktion.
Manche dieser Funktionen sind in Diensten verpackt, die ständig im Hintergrund laufen.
Es gibt aber auch viele Programme, die keine eigene Update-Funktion eingebaut haben.
Informiert man sich für diese Programme nicht selber im Internet über Updates, veralten diese
auf dem System immer mehr und Sicherheitslücken häufen sich an.

Bei PC-Anfängern installiere ich deshalb lieber ein Linux-System.

An dieser Stelle ein klarer Pluspunkt für Linux.


-- Spyware / Adware / Autostart --

Viele Entwickler von Windows-Programmen sehen ihr Programm als sehr wichtig an und möchten
es in den Vordergrund stellen. So werden viele Programme gleich nach dem Installieren
ungefragt in den Autostart eingetragen, obwohl das oft unerwünscht ist.

Einige Programme installieren heimlich Erweiterungen in den Internet-Browsern, um die
Surfgewohnheiten der Benutzer zu analysieren und diese Informationen an Werbefirmen zu
verkaufen.

Bei Linux sind viele Programme Open-Source, weshalb diese so gut wie immer frei von
Adware / Spyware sind.

Es ist mehrfach zu lesen, dass Benutzer von Windows ausspioniert werden. Bei MacOS soll es
noch schlimmer sein.

Bei Linux besteht kein Interesse, mit dem Betriebssystem Geld zu erwirtschaften und es
steckt auch keine einzelne Firma dahinter, die man zu Spionage zwingen könnte.


-- Programmeinstellungen --

Bei Windows halten sich wenige Software-Entwickler an Standards und legen die Einstellungen
ihrer Software oft an Orten ab, die nicht dafür vorgesehen sind.
Die Linux-Programme hingegen halten sich so gut wie immer an die Vorgaben und speichern die
Einstellungen im Home-Verzeichnis ab.


Das sind so auf die Schnelle meine Gründe, die mir gerade eingefallen sind, warum ich auf
ein Linux-System umgestiegen bin.

Zudem kommt noch, dass ich mich inzwischen an Windows statt gesehen habe (gibt nichts neues
mehr zu entdecken). Es muss also nicht immer ein Vorteil beim anderem System geben,
der zu einem Umstieg führt, sondern der Grund kann auch einfach sein, dass man einfach mal
ein anderes System haben will, das sich anders anfühlt und sich anders verhält.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Linux gar nicht so flexibel

Beitrag von TroaX »

Einige deiner Vorteil bzgl. Linux sind aus der Sicht von "normalen" Nutzern allerdings extrem nachteilig.

Paketverwaltung
Gegen deine Argumente spricht nichts. Trotzdem empfinden 0815-User genau das für Problematisch. Gerade wenn eine bestimmte Software gesucht oder Features einer neueren Version gewünscht sind. Die Paketverwaltungen der Distributionen haben da zwei erhebliche Nachteile. Die Pakete, die in die offiziellen Paketquellen aufgenommen werden, werden von einer bestimmten Gruppe bestimmt. Das führt dazu, das häufig beliebte Software nicht in den offiziellen Paketquellen zu finden sind. Je nach Paketmanager ist es dann nötig, fremde Paketquellen über die Konsole in die Liste aufzunehmen (wenn eine Distri keine grafische Verwaltung der Paketquellen anbietet - Und selbst über eine solche Verwaltung ist es für einen Anfänger erstmal abstrakt). Genau das gleiche gilt für die Version. Stellenweise sind die Paketquellen bestimmter Anwendungen veraltet. In neueren Versionen sind stellenweise interessante Features drin. Und trotzdem landen die Versionen erst erheblich später in den Quellen.

Treiber
Die werden ebenfalls über die Paketquellen bereitgestellt. Unmengen an Treibern fehlen meistens und auch bei der Aktualität nicht immer auf der Höhe. Wenn man Glück hat, kommt man mit den Treibern aus der Quelle hin. Bei mir z.B. bekam ich ohne Konsole und manuellem kompilieren nie mein Thinkpad Edge oder mein Elitebook vollständig ans laufen.

Softwarequalität
Dank dem UAC befinden sind mittlerweile für die meisten Anwendungen unter Windows die Einstellungen im Benutzerordner (Bei Linux das Home-Verzeichnis). Das ist kaum noch ein Thema. Aber ich kenne nun einmal beide Welten. Windows und Linux. Ich verwende ungefähr 80 % kommerzielle Software. Und das aus vielen verschiedenen Gründen. Der wichtigste ist aber, das bei kommerziellen Produkten der finanzielle Erfolg gesichert sein soll. Und das bedeutet (zumindest in den meisten Fällen), das die Software für die Nutzer entwickelt wird. OpenSource bedeutet allerdings, das jemand oder eine Gruppe eine Anwendung entwickelt haben, um ihre eigenen Probleme zu lösen und diese dann auch anderen zur Verfügung stellen. Und das merkt man einfach.

Ich werde weiterhin uneingeschränkt auf MS Office setzen. Neben der Kompatibilität mit dem gängigen Standard (was logisch sein sollte) habe ich auch z.B. mit Access nie Abstürze. Base von LibreOffice oder OpenOffice verrecken immer. Mit diesen Anwendungen ist arbeiten unmöglich. Wenn ich die Lagerverwaltung implementiere, die wir damals in meiner Ausbildung mit Access umgesetzt haben, dann klappt das mit Access auch. Egal wie komplex ich das mache. Base verreckt immer. Außerdem ist das Gestalten von Dokumenten mit Word einfach viel angenehmer. Vor allem, wenn man die Dokumente streng semantisch erstellt. Scribus muss, um uneingeschränkt verwendet werden zu können, selbst erweitert werden. Als ich es zuletzt getestet habe, konnte Scribus noch keine Aufzählungs-Listen. Publisher hatte das schon immer am Bord.

Es ist ja toll, das Xara Lite für Linux für Lau ist und auch eine aufgeräumte Oberfläche hat. Aber MS Expression Design kostet mittlerweile auch nichts, ist ebenfalls aufgeräumt und kann zudem deutlich mehr. Wer noch mehr will, dem kann ich Magix Foto und Grafikdesigner empfehlen. Rastergrafiken kommen da zwar etwas zu kurz. Aber als Vektor-Programm einfach super. Und wer professionell arbeiten will, dem würde ich lieber Illustrator oder Corel Draw empfehlen als Inkscape. Mit der Software habe ich in meinen Tests auch nur Probleme gehabt. Entweder stimmt die Performance nicht (ruckeln, sobald ein Schlagschatten im Spiel ist), Abstürze beim Einsatz bestimmter Filter oder eine Version, bei der ein Menüpunkt einfach mal ohne Funktion ist.

Die Auswahl unter Windows ist logischerweise riesig und man muss viel testen, um das richtige Programm zu finden. Aber wenn man eines gefunden hat und dann eine quelloffene Alternative testet, der müsste merken was ich meine. Gute Software muss nicht immer was kosten. Und es ist wirklich ärgerlich, das einem oft Adware untergeschoben wird. Aber es gibt vielleicht nicht mehr als eine Hand voll quelloffener Anwendungen, die ich wirklich für gut befinde. Diese laufen aber auch unter Windows. Alle anderen Programme laufen aber nicht unter Windows oder nur mehr schlecht als recht. Und diese Kompromisse bin zumindest ich nicht bereit, einzugehen.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Antworten