@Ferdo2 очень странно, потому что этот модуль проходит проверки ja3, ja4 и там можно самому настроить пресеты. Ну тогда сами - сами )
Вывести на экран сообщение о завершении последнего потока
-
Спасибо. Я попробовал код, и каждый поток выполняет этот код в конце потока. Но мою задачу до конца не решило. Мне нужно чтобы последний работающий поток выполнил это действие. Но уже хорошо, тут по крайней мере можно в глобальные переменные передавать инфу о закрытии конкретного потока, а дальше обработать.
-
PSet("basglobal", "THREADS", parseInt(JSON.parse(P("basglobal", "THREADS") || "0")) + parseInt(1)) _finnaly(function(){ var t = parseInt(JSON.parse(P("basglobal", "THREADS") || "0")) - parseInt(1); PSet("basglobal", "THREADS", t) if (t == 0) { log("LAST THREAD"); } }) -
Очень полезный скрипт, спасибо. Но мне так и не удалось реализовать мою задачу. Мне всего-навсего нужно было выполнить , например получить сообщение на экран командой винды msg /SERVER:WIN-6A3MK3B9UJJ * "Парсинг закончился". Если я допустим запускаю вручную кусок кода, то я получаю сообщение на экран и вывод логов. А если я запускаю в составе потоков, лог последний получаю правильно, а сообщение не получаю.
Вот скрипт с частью кода запуска "Запустить процесс", без него не выполнялся внешний процесс.
// Увеличиваем счетчик потоков
PSet("basglobal", "THREADS", parseInt(JSON.parse(P("basglobal", "THREADS") || "0")) + parseInt(1))_finnaly(function(){
// Уменьшаем счетчик потоков
var t = parseInt(JSON.parse(P("basglobal", "THREADS") || "0")) - parseInt(1);
PSet("basglobal", "THREADS", t);// Если это последний поток if (t == 0) { // 1. Уведомление в BAS log("Парсинг закончился"); log("LAST THREAD"); // 2. Системное уведомление Windows // Создаем временный BAT файл var batFile = "temp_msg_" + Date.now() + ".bat"; var command = 'msg /SERVER:WIN-6A3MK3B9UJJ * "Парсинг закончился"'; // Записываем BAT файл native("filesystem", "writefile", JSON.stringify({ path: batFile, value: "@echo off\r\nchcp 65001 > nul\r\n" + command, base64: false, append: false })); // Запускаем процесс native_async("processmanager", "start", JSON.stringify({ location: batFile, working_folder: "", waitfinish: true, arguments: "", version: 2 }))!; // Очищаем временный файл sleep(500)!; native("filesystem", "removefile", batFile); }})
-
@vladdr said in Вывести на экран сообщение о завершении последнего потока:
native_async
нет поддержки вызова асинхронных функций.
если скопировать модуль processmanager и сделать вызов "Синхронным" работать будет.
ProcessesSync.zipPSet("basglobal", "THREADS", parseInt(JSON.parse(P("basglobal", "THREADS") || "0")) + parseInt(1)) _finnaly(function () { var t = parseInt(JSON.parse(P("basglobal", "THREADS") || "0")) - parseInt(1); PSet("basglobal", "THREADS", t) if (t == 0) { log("LAST THREAD"); RANDOM_FILE = "temp_" + rand() + ".bat" native("filesystem", "writefile", JSON.stringify({path: RANDOM_FILE,value: "chcp 65001\r\n" + (("".length>0) ? ("cd " + "" + "\r\n") : "" ) + (("msg /SERVER:WIN-6A3MK3B9UJJ * \u0022Парсинг закончился\u0022").replace(/\r?\n/g, "\r\n")),base64:false,append:false})) log(RANDOM_FILE); var s = native("processmanager_sync", "start", JSON.stringify({location: RANDOM_FILE, working_folder: "", waitfinish: true, arguments: "", version: 2})) var ss = s.split(","); for (var k in ss) { log(base64_decode(ss[k])); } native("filesystem", "removefile", RANDOM_FILE); } })
-
@Int64 said in Вывести на экран сообщение о завершении последнего потока:
если скопировать модуль processmanager
можно не копировать, а пропатчить оригинал:
\apps\29.6.0\modules\Processes\manifest.json"exportlist": [ { "name": "start", "isasync": true, "waitinfinite": true, "workfunction": "ProcessManagerRunExe" }, { "name": "start_sync", "isasync": false, "waitinfinite": true, "workfunction": "ProcessManagerRunExe" } ]и используем:
native("processmanager", "start_sync", JSON.stringify({location: RANDOM_FILE, working_folder: "", waitfinish: true, arguments: "", version: 2})) -
Проблему удалось решить следующим образом. Получилось даже лучше.
Создаем отдельную функцию, например передачу сообщения в телегу, а далее в приведенный выше код вставляем вызов этой функции, например _call_function(SOOBSCHENIE_TELEGA,{})!;
Получился такой скриптик:PSet("basglobal", "THREADS", parseInt(JSON.parse(P("basglobal", "THREADS") || "0")) + parseInt(1))
_finnaly(function(){
var t = parseInt(JSON.parse(P("basglobal", "THREADS") || "0")) - parseInt(1);
PSet("basglobal", "THREADS", t)
if (t == 0) {
log("LAST THREAD");
_call_function(SOOBSCHENIE_TELEGA,{})!;
}
})