Стеки задач Wscript.exe и нагрузка на ЦП - PullRequest
0 голосов
/ 13 июля 2020

РЕШЕНО:

Я понял, что процесс 'wscript.exe' не важен для поддержания работы программы, если вы дадите ей спать, поэтому я просто убиваю ее пакетом файл в сценарии после запуска ActiveXObject.

Я установил Realterm, который для меня действует как клиент RS485. Работает как шарм, но не позволяет сохранять настройки в качестве предустановки. Поэтому каждый раз, когда вы его запускаете, вам придется снова и снова вводить свои настройки, что для меня является головной болью.

У них есть несколько «легкий» способ справиться с этим, позволив вам напишите сценарий, который создает экземпляр ActiveXObject (да, довольно старый, да ...) и предопределяет некоторые настройки, такие как COM-порт, скорость передачи и т. д. c.

Это предоставленная ими демонстрация того, что сценарий должен выглядеть так:

var RT = new ActiveXObject("realterm.realtermintf");
RT.caption="Windows Scripting Host Demo";
RT.HalfDuplex=1;
RT.baud=57600;
RT.FlowControl=2; //2=RTS/CTS
RT.Port=1;
RT.PortOpen=1;
RT.LinefeedIsNewline=1;
RT.SelectTabSheet("I2C");

RT.PutString("G1"); 
RT.NewlineTerminal();
WScript.Sleep(500);

RT.PutString("SB20DP SB302P"); 
RT.NewlineTerminal();
WScript.Sleep(500);
RT.PutString("SB20DP SB302P"); 
//RT.PutChar(10); //LF
RT.NewlineTerminal();

WScript.Echo("Realterm will close when you click OK");

RT.Close();

Если вы нажмете «ОК» во всплывающем окне, которое будет

WScript.Echo («Realterm закроется, когда вы нажмете ОК»);

создает экземпляр, вызывается метод ' .Close () ' и окно закрывается правильно.

  • Проблема / неудобство в том, что там будет всегда открытым всплывающим окном, если вы используете go демо. Я хотел бы иметь возможность просто закрыть окно и задачу, щелкнув красный X в форме окна.

Это мой текущий код и способ избавиться от неудобств.

var RT = new ActiveXObject("realterm.realtermintf");
RT.caption="Realterm Mod";
RT.HalfDuplex=1;
RT.baud=9600;
RT.FlowControl=0; //2=RTS/CTS
RT.Port=16;
RT.PortOpen=0;
RT.LinefeedIsNewline=1;
RT.SelectTabSheet("Send");
 
RT.NewlineTerminal();


while (true){
    
    var date = new Date();
    var hours = date.getHours();
    var minutes = date.getMinutes();
    
    if(hours >= 16 && minutes >= 0){ //closes if certain time is met
        WScript.Echo("Feierabend!")
        RT.Close();
    }
    else{ // keeps the program from closing
        continue;
    }
}

Теперь проблема: если вы принудительно открыли его, вставив время (истина) - l oop и NOT , используйте всплывающий способ решения этой проблемы, когда вы закрываете При нажатии на красный крестик в форме окно закрывается , но задача wscript.exe ' остается открытой и загружает ваш процессор. Задача также складывается, если вы должны были закрыть и снова открыть программу.

Мой вопрос:

  • Есть ли способ поймать закрытие окна до того, как это произойдет, или проверить если он был закрыт, а затем выполните ' .Close () ' на самом объекте или вызовите пакетный файл , который убивает задачу?

I у меня нет такого большого опыта работы с WScript, поэтому я понятия не имею, сможете ли вы вообще обрабатывать подобные события. Обычно это для меня больше упражнение / уловка, чем реальная проблема, потому что я учусь программировать и хочу больше понимать и иметь более глубокие знания, поэтому я был бы признателен за реальные ответы на проблему.

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...