Thread oder Prozess im einer anderen EXE?

Für allgemeine Fragen zur Programmierung mit PureBasic.
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Thread oder Prozess im einer anderen EXE?

Beitrag von funkheld »

Hallo, guten Tag.

Was ist der Vorteil/Nachteil bitte von einem Thread oder einem Process in einer anderen EXE die mit Sendmessage und Filemap gesteuert wird vom Hauptprogramm ?

Danke.
Gruss
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Thread oder Prozess im einer anderen EXE?

Beitrag von RSBasic »

Ich verstehe leider die Frage nicht.
Ein Thread ist ein Teil eines Prozesses und ein Prozess ist die komplette Anwendung bzw. die EXE-Datei.

Ich kann dir nur die Vor- und Nachteile eines Threads nennen:
Vorteil: Läuft unabhängig
Nachteil: Läuft langsamer
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Sicro
Beiträge: 968
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Thread oder Prozess im einer anderen EXE?

Beitrag von Sicro »

Ich denke, er will die Vorteile / Nachteile zwischen folgenden Methoden wissen:

Methode 1

Code: Alles auswählen

Procedure Thread(*Parameter)
  ; Code
EndProcedure

CreateThread(@Thread(), 0)
Methode 2
Hauptprogramm:

Code: Alles auswählen

RunProgram("Programm2.exe")
; ...
SetFileMapData(...)
SendMessage_(WindowHandleFromProgram2Window, Message, ...)
Nebenprogramm (Program2.exe):

Code: Alles auswählen

Procedure Callback(hWnd, uMsg, wParam, lParam)
  If uMsg = #MyMessage
    ; FileMap lesen, die vom Hauptprogramm mit Daten gefüllt wurde
  EndIf
 
  ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure
; ...
SetWindowCallback(@Callback())
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
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Thread oder Prozess im einer anderen EXE?

Beitrag von funkheld »

Ja danke, so meine ich es.
Habe mich wohl nicht so richtig ausgedrückt.

Danke.
Gruss
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Thread oder Prozess im einer anderen EXE?

Beitrag von RSBasic »

Ich würde grundsätzlich alles in einer Anwendung machen. Wenn du wiederverwendbare Funktionen für mehrere Programme bereitstellen möchtest, kannst du diese in einer DLL- oder Anwendungsdatei einfügen.
Du kannst diese natürlich auch in einer Include-Datei einfügen, die von mehreren, verschiedenen Quellcodes/Projekten verwendet werden können.
Es kommt immer darauf an, was du machen möchtest. Was möchtest du denn genau machen bzw. was macht deine Anwendung genau?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Thread oder Prozess im einer anderen EXE?

Beitrag von funkheld »

Ich möchte in einem Programm den Roboter steuern mit/über Wlan und dort auch Grafisch die Daten darstellen.
Der Input zum Steuern des Roboter soll vom Hauptprogramm kommen, welches auch noch serielle Daten empfangen soll.
Das steuern des Roboter mache ich mit Sendmessage vom Hauptprogramm.
Das Hauptprogramm soll mit dem Wlan außen vor gelassen werden, weil Wlan doch sehr Zeitintensive ist.

Darum wollte ich es trennen, weil die Wlan-Daten ca 100 ms dauern pro Ultraschallmessung des Roboters.

Gruss
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Thread oder Prozess im einer anderen EXE?

Beitrag von RSBasic »

Ich würde das in einem Programm machen und nicht getrennt. Du hast ja z.B. mit Threads die Möglichkeit, mehrere Vorgänge gleichzeitig laufen zu lassen.
Außerdem ist es für dich einfacher, auf die empfangenen Daten u.ä. zuzugreifen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Sicro
Beiträge: 968
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Thread oder Prozess im einer anderen EXE?

Beitrag von Sicro »

In dem Fall wäre ein Thread mit einer Warteschlange am besten. Das Hauptprogramm kann flüssig weiter bedient werden, während sich der Thread um die träge Verarbeitung der Aufgaben kümmert.
So in etwa:

Code: Alles auswählen

Structure QueueStruc
  Command.i
  Parameter1.i ; z. B. die Zeit, wie lange der Befehl ausgeführt werden soll
  Parameter2.i
  Parameter3.i
  Parameter4.i
  ; ...
EndStructure

Structure ThreadDataStruc
  List Queue.QueueStruc()
  ExitThread.i
EndStructure

Enumeration Command
  #Robot_Move_Forward
  #Robot_Move_Backward
  ; ...
EndEnumeration

Procedure Thread(*void)
  Shared Mutex, ThreadData
 
  Repeat
    ForEach ThreadData\Queue()
      If LockMutex(Mutex)
        Select Command
          Case #Robot_Move_Forward
            ; Aufgabe ausführen
          Case #Robot_Move_Backward
            ; Aufgabe ausführen
        EndSelect
        UnlockMutex(Mutex)
      EndIf
    Next
  Until ThreadData\ExitThread
EndProcedure

Procedure AddToQueue(Command, Parameter1=0, Parameter2=0, Parameter3=0, Parameter4=0)
  Shared Mutex, ThreadData
 
  If LockMutex(Mutex) And AddElement(ThreadData\Queue())
    With ThreadData\Queue()
      \Command    = Command
      \Parameter1 = Parameter1
      \Parameter2 = Parameter2
      \Parameter3 = Parameter3
      \Parameter4 = Parameter4
    EndWith
  EndIf
EndProcedure

Define.ThreadDataStruc ThreadData
Define Mutex  = CreateMutex()
Define Thread = CreateThread(@Thread(), 0)

OpenWindow(...)
; ...

Repeat
  Event = WaitWindowEvent()
 
  If Event = #PB_Event_Gadget And EventGadget() = #Button_Robot_Move_Forward
    AddToQueue(#Robot_Move_Forward)
    Debug "'Roboter nach vorne bewegen' wurde zur Warteschlange hinzugefügt!"
  EndIf
Until Event = #PB_Event_CloseWindow

Debug "Warten wir noch bis die Warteschlange sauber abgebrochen wurde..."
ThreadData\ExitThread = #True
WaitThread(Thread)
Debug "Ok, Programm wird beendet!"
Edit [19:04]: Code wurde verbessert.
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
funkheld
Beiträge: 651
Registriert: 31.12.2009 11:58

Re: Thread oder Prozess im einer anderen EXE?

Beitrag von funkheld »

Ja danke für die große Hilfe.
Werden mich noch einmal mit den Threads auseinandersetzen.

Gruss
Antworten