2 Funktionen = 2 Prozesse oder = 1 Prozess?

  • Hallo zusammen,

    wenn ich 2 Funktionen gleichzeitig ausführen möchte, benötige ich dann auch 2 Prozesse dafür oder geht das, das in einem Script zu machen?
    Wenn ich 2 Prozesse benötige, wie kann ich dann die Daten von dem einem Prozess in den andren übertragen?
    In meinem Fall möchte ich einen UDP-Server machen, der auf Ereignisse lauscht.
    Wenn ein Ereignis übertragen wird, soll er gleichzeitig weiterhin lauschen, aber das ganze auch verarbeiten: 1.Meldung anzeigen und 2.In Protokolldatei schreiben

    LG FKFK

  • wenn es exact gleichzeitig sein soll dann brauchst du 2 prozesse, aber wenn die verarbeitung nicht unbedingt zeitaufwenig ist würde ich die einfach machen sobald du daten bekommst

    pseudocode:

    while 1
    warte auf daten
    wenn daten erhalten dann verarbeiten
    wend

  • 1.Frage:
    Momentan geht es, da er die wartenden Daten scheinbar in eine Wartschleife reiht.
    Leider kann die Protokoll-Datei aber erst verändert werden, sobald die Meldung (kleines Ereignisfenster) bestätigt wurde.
    Gibt es auch eine Möglichkeit, wie ich in die Protkoll-Datei schreiben kann, ohne dass ich in dem Meldungsfenster, welches das Ereignis mitteilt, auf OK drücken muss?
    2.Frage:
    Wie kann ich, falls ich etwas in einem separaten Prozess mache, Daten/Befehle von meinem Hauptprozess an diesen Prozess übergeben?

  • OK, dann schonmal Danke :)
    Ich habe einfach die Scrypte aus der Hilfe ein bisschen umgebastelt:

    Server
    [autoit]

    #include-once
    #include "\\xy\xy\DatenNachDatei.au3"

    [/autoit] [autoit][/autoit] [autoit]

    ;;This is the UDP Server
    ;;Start this first

    [/autoit] [autoit][/autoit] [autoit]

    ; Start The UDP Services
    ;==============================================
    UDPStartup()

    [/autoit] [autoit][/autoit] [autoit]

    ; Register the cleanup function.
    OnAutoItExitRegister("Cleanup")

    [/autoit] [autoit][/autoit] [autoit]

    ; Bind to a SOCKET
    ;==============================================
    $socket = UDPBind(@IPAddress1, x)
    If @error <> 0 Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $Daten = UDPRecv($socket, 5000)
    If $Daten <> "" Then
    Daten ($Daten)
    EndIf
    sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Cleanup()
    UDPCloseSocket($socket)
    UDPShutdown()
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Daten($Daten = "")
    If $Daten = "" Then Return
    $aDaten = StringSplit($Daten, "|")
    _WriteInFile ("\\xy\xy\Protokoll.txt", $Daten & @CRLF)
    MsgBox(16, "Fehlerbericht!", "|IP-Adresse1: " & $aDaten[2] & "|IP-Adresse2: " & $aDaten[3] & "|IP-Adresse3: " & $aDaten[4] & "|IP-Adresse4: " & $aDaten[5] & "|Computername: " & $aDaten[6] & "|Username: " & $aDaten[7] & @CRLF & "|OS-Typ: " & $aDaten[8] & "|OS-Version: " & $aDaten[9] & "|OS-ServicePack: " & $aDaten[10] & "|AutoIT-Version: " & $aDaten[11] & @CRLF & "|Error-Code: " & $aDaten[12] & "|Extended-Code: " & $aDaten[13] & "|Scriptpfad/-name: " & $aDaten[14] & @CRLF & "|Kommentare: " & $aDaten[15] & @CRLF & "|Datum/Zeit: " & $aDaten[1])
    EndFunc

    [/autoit]
    Client
    [autoit]

    ;;This is the UDP Client
    ;;Start the server first

    [/autoit] [autoit][/autoit] [autoit]

    ; Start The UDP Services
    ;==============================================
    UDPStartup()

    [/autoit] [autoit][/autoit] [autoit]

    ; Register the cleanup function.
    OnAutoItExitRegister("Cleanup")

    [/autoit] [autoit][/autoit] [autoit]

    ; Open a "SOCKET"
    ;==============================================
    $socket = UDPOpen("x.x.x.x", x)
    If @error <> 0 Then Exit

    [/autoit] [autoit][/autoit] [autoit]

    Local $Daten = "", $Kommentar = "Automatisch generiert"

    [/autoit] [autoit][/autoit] [autoit]

    $Daten &= @MDAY & "." & @MON & "." & @YEAR & "/" & @SEC & ":" & @MIN & ":" & @HOUR
    $Daten &= "|"
    $Daten &= @IPAddress1
    $Daten &= "|"
    $Daten &= @IPAddress2
    $Daten &= "|"
    $Daten &= @IPAddress3
    $Daten &= "|"
    $Daten &= @IPAddress4
    $Daten &= "|"
    $Daten &= @ComputerName
    $Daten &= "|"
    $Daten &= @UserName
    $Daten &= "|"
    $Daten &= @OSType
    $Daten &= "|"
    $Daten &= @OSVersion
    $Daten &= "|"
    $Daten &= @OSServicePack
    $Daten &= "|"
    $Daten &= @AutoItVersion
    $Daten &= "|"
    $Daten &= @error
    $Daten &= "|"
    $Daten &= @extended
    ;$Daten &= "|"
    ;$Daten &= @exitCode
    ;$Daten &= "|"
    ;$Daten &= @exitMethod
    $Daten &= "|"
    $Daten &= @ScriptFullPath
    $Daten &= "|"
    $Daten &= $Kommentar

    [/autoit] [autoit][/autoit] [autoit]

    ;While 1
    Sleep(2000)
    $status = UDPSend($socket, $Daten)
    If $status = 0 then
    MsgBox(0, "ERROR", "Error while sending UDP message: " & @error)
    Exit
    EndIf
    ;WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Cleanup()
    UDPCloseSocket($socket)
    UDPShutdown()
    EndFunc

    [/autoit]
  • FKFK


    Mit Adlib-Funktionen kann man auch viele Sachen (fast) gleichzeitig machen, so hab ich das gelöst bei meinem Chat.

    1 Adlibfunktion, die überprüft, ob sich jemand verbinden will
    1 Adlibfunktion, die überprüft, ob einer der Clients etwas schickt
    1 Adlibfunktion, die überprüft, ob noch alle Clients online sind

    da lässt sich viel machen und das Programm läuft mit vielleicht maximal 3 % CPU Auslastung @3.6Ghz
    [MSIE_newline_end ]

  • So, es klappt alles.
    Ich weiß noch nicht, ob ich das Script veröffentlichen soll, ist nämlich sau gut geworden :D :D
    Vielleicht mache ich ja eine UDF draus (als solche benutze ich das bereits, aber angepasst für meine Zwecke): Habe ein Fehlerberichtserstattungstool draus gemacht.
    Kann man über den Tray aufrufen und dann kann man ein paar Kommentare machen und anschließend werden noch einige Infos, wie OS, IP usw. hinzugefügt und dann wird es an den Server gesendet, welcher 1. eine Fehlermeldung in Form eines Fensters ausgibt 2. das in eine Protokolldatei schreibt.
    Damit das Fenster nicht die Vearbeitung aufhält, habe ich das in einen separten Prozess ausgelagt.
    In die Tray habe ich noch ne Menge nützliche Materialien reingepackt...
    Zugriff darauf werde ich aber erst wieder im August haben.
    Was genau davon benötigst du denn?
    Das ganze Script werde ich dir nicht geben können, aber evtl. eine UDF :)

    oetzn: Adlib-Funktion nutzt leider nichts, weil ich zwei Dinge gleichzeitig machen muss und das Meldungsfenster das Script unterbricht..