Sign in to follow this
Followers
0
-
Recently Browsing 0 members
No registered users viewing this page.
-
Similar Content
-
By argumentum
so in https://www.autoitscript.com/forum/topic/193254-solved-ipc-between-system-and-user/ I asked around about IPCs and got all the answers I was looking for.
Now the question is: what IPC is most "resilient" on an overwhelmed PC, meaning, the CPU is at 100%, memory is top out and, as is always, need to rely on the IPC.
..and all this happened because I open over 100 GUIs at once 😜
..but it happens sporadically on low CPU or memory demand anyways.
..should I sleep() some time before running another instance ?
I did not know if to make the question in technical, chat, ..or here. So it's here.
Since you will ask what I've tried, I've used the IPC from the Fork UDFish ( WM_COPYDATA that can do Admin/user mix ) and the FMIPC file mapping, that work under the same conditions.
So, how do you handle IPC if it fails ?
-
By GillesMaisonneuve
Good morning,
I am trying to read a Unicode utf8 string from a perl subprocess via StdoutRead.
I use an AUtoIt GUI and display result in an 'Edit' control (see my code below) using 'Courier New', a font that can handle Unicode characters.
I was expecting a result looking like (CMD console):
++$ chcp 65001>NUL: & perl -Mutf8 -CS -e "use 5.018; binmode STDOUT,q(:utf8); say qq(\x{03A9})" & chcp 850>NUL: Ω Instead I get someting like this (see downward the screen copy):
++$ chcp 1250>NUL: & perl -Mutf8 -CS -e "use 5.018; binmode STDOUT,q(:utf8); say qq(\x{03A9})" & chcp 850>NUL: Ω Obviously while I was expecting to receive an utf8 char, it seems to have been converted to Windows ANSI codepage 1250 (Windows default for Western/Central Europe, right ?)
What am I doing wrong? Is there someone who could guide me?
Here is my code and my output in the GUI.
Creating and configuring the Edit control:
Local $Edit1 = GUICtrlCreateEdit( "", 20, 110, 780, 500, BitOr($GUI_SS_DEFAULT_EDIT,$ES_MULTILINE,$ES_READONLY) ) GUICtrlSetData($Edit1, "This field will contain text result from external Perl command") GUICtrlSetFont($Edit1, 10, $FW_THIN, $GUI_FONTNORMAL, "Courier New")
Executing Perl command (note: `-Mutf8` and `-CS` garantees that I work in utf8 and STDOUT accepts wide-characters):
local $ExePath = 'perl.exe -Mutf8 -CS ' ;~ if perl in PATH, no need for full path C:\Perl\bin\perl.exe local $Params = '-e "use 5.018; use utf8; use charnames q(:full); binmode STDOUT,q(:utf8);' & _ 'say scalar localtime; say qq(\N{GREEK CAPITAL LETTER OMEGA})"' local $Cmd = $ExePath & ' ' & $Params Local $iPID = Run($Cmd, "", @SW_HIDE, BitOR($STDERR_CHILD, $STDOUT_CHILD))
Reading STDOUT and displaying it into the Edit control:
While 1 $sOutput &= StdoutRead($iPID) If @error Then ; Exit the loop if the process closes or StdoutRead returns an error. ExitLoop EndIf WEnd If $sOutput <> '' Then GUICtrlSetData($Edit1, $sOutput) EndIf
And now, what I get on my GUI:
-
By Funtime60
I have a Parent Script that starts multiple, concurrent child processes. I cannot figure out how to apply the technique for using StdoutRead in the examples in a way that listens to them all simultaneously.
For reference, there can be any even number of, or single, child processes and there is an 1D array, $PIDS, that stores the PIDS of all the child processes and they should be outputting to another 1D array $sOutput.
Thank you for your time. Please just point me in the right direction. I'm sorry if I missed another topic that covers this.
-
By tatane
Hi,
I would like to send an array from a script to a another. This array has 1000 rows and 4 columns with this kind of data :
1st row = 528 ; 31 ; HOSTNAME|1|02:45:47|abcdefgh|username|5 ; old
2nd row = ...
What IPC should I use ?
-
By Blueman
Hey Guys,
I have a (i think) simple question, but i can't seem to get the answer though the help-files.
Hope that you can help me with this issue.
- I am opening a SSH Connection with the following function
Func _Connect($session,$usr,$pass) $exec = @ScriptDir & "\PLINK.EXE" If Not FileExists($exec) Then _Err("PLINK.EXE Not Found!",0) $pid = Run($exec & " -load " & $session & " -l " & $usr & " -pw " & $pass, @ScriptDir, @SW_HIDE, 0x1 + 0x8) ;Run SSH.EXE If Not $pid Then _Err("Failed to connect",0) $currentpid = $pid ;$rtn = _Read($pid) ;Check for Login Success - Prompt ;MsgBox(48,"","1") ;sleep(5000) ;Wait for connection Return $pid EndFunc - This will connect to a CMS Server with a vt100 interface where a dynamic report is generated every 20 seconds.
- Then i will read the contents with the following Function
Func _Read($pid) $SSHREADTIMEOUT = 0 If Not $pid Then Return -1 Local $dataA Local $dataB Do $SSHREADTIMEOUT += 1 $dataB = $dataA sleep(100) $dataA &= StdOutRead($pid) If @error Then ExitLoop Until ($dataB = $dataA And $dataA And $dataB) OR $SSHREADTIMEOUT == 50 Return $dataA EndFunc This all goes correctly, but i can only read the contents once.
When i try to read the contents again i get nothing.
Maybe because the CMS isn't changing, but the values in the report is changing every 20 seconds.
I need to somehow read al of the contents every time i perform a Read action, but how?
Yes, i can use it in a While loop, but also then i get nothing or a small line of text and not the whole report.
Any Idea?
Thanks Guys!
--Edit--
I have fixed the problem by changing the terminal session to a vt220 session.
The only problem now is that i want to send the: "Data link escape" command and that is something i cannot fix,.
I have tried;
StdinWrite($Pid,Hex(0x10)) StdinWrite($Pid,Chr(16)) StdinWrite($Pid,{DLE}) But nothing seems to work.
-- Edit-2 --
Guys, fixed that too!
Forgot to add the number '5' to actually execute the assignment.
So fixed it by using;
StdinWrite($Pid,Chr(16)) StdinWrite($Pid,"5")
Thanks for reading with me
-