Закрыть принудительно поток
-
Добрый день, столкнулся с проблемой незакрытия браузера! реально работают около 5 - 7
0_1571726472308_bassss.PNGв 2 х словах
try {
ThreadRun.StopThread();
} catch (e) {}try {
ThreadRun = new BASThread();
a = ThreadRun[i].RunFunction("bbb" , {}); // тут в черных кишках открываються браузер урл может иногда и не открыться
c = await a;
ThreadRun.StopThread();
} catch (e) {}интересует как погасить пустышки или открытые потоки у которых время работы больше 10 минут ( при етом я могу не знать имен етих переменных потоков ( Они генеряться автоматически
-
@vitsh1974 said in Закрыть принудительно поток:
Добрый день, столкнулся с проблемой незакрытия браузера! реально работают около 5 - 7
0_1571726472308_bassss.PNGв 2 х словах
try {
ThreadRun.StopThread();
} catch (e) {}try {
ThreadRun = new BASThread();
a = ThreadRun[i].RunFunction("bbb" , {}); // тут в черных кишках открываються браузер урл может иногда и не открыться
c = await a;
ThreadRun.StopThread();
} catch (e) {}интересует как погасить пустышки или открытые потоки у которых время работы больше 10 минут ( при етом я могу не знать имен етих переменных потоков
Проще изначально сохранять в массив все промисы. Но можно воспользоваться методом Api.GetTasks()
https://wiki.bablosoft.com/web-interface/#/callbasfunction?id=function-statisticон вернёт объект со всеми запущенными функциями
-
-
@vitsh1974 Метод вернул уже объект в котором есть промис для каждого потока.
-
в принципе да вот то что нужно СПАСИБО
Example #2. Stop only long running tasks:var RunningTasks = Api.GetTasks()
Object.values(RunningTasks).forEach(function(Task){
if(Task.started_at < Date.now() - 1000 * 60 * 60)
{
if(Task.type == "function")
Task.object.stop();
else
Task.object.StopThread();
}
})
-
получаеться дело не совсем в потоках...
вот скрин - запущен 1 поток а браузеров 4.... даже если ручками удалить хтмл, а потом опять открыть инспекотр браузеров, он покажет 4, а теоретически должно быть 1
-
@vitsh1974 said in Закрыть принудительно поток:
получаеться дело не совсем в потоках...
вот скрин - запущен 1 поток а браузеров 4.... даже если ручками удалить хтмл, а потом опять открыть инспекотр браузеров, он покажет 4, а теоретически должно быть 1Функции могут работать без эмуляции браузера, но вот эмуляция браузера ни как не может работать без потока. Что вы хотите сделать то?
-
@fox
вот у меня такой код ( может чего то не хватает?
да все верно -- у меня есть ряд вызовов без браузера...
может они как то влияние оказывают.
если они - то хотелось бы их исключить .... ето простые гет запросы на получнеие даннх/////Browser started, need to update running browser label
if (EventType == "browser_add") {
let CurrentValue = parseInt($("#BrowserNumber").html())
$("#BrowserNumber").html((CurrentValue + 1).toString())/////Add browser to viewer AddBrowser(EventData["browser_id"], EventData["thread_number"]) } /////Browser finished, need to update running browser label if (EventType == "browser_remove") { let CurrentValue = parseInt($("#BrowserNumber").html()) $("#BrowserNumber").html((CurrentValue - 1).toString()) /////Remove browser from viewer RemoveBrowser(EventData["browser_id"], EventData["thread_number"]) }
т е в конечном итоге мне не надо показывать ети кнопки при нажатии на которую будет екаранчик с
Image unavailable. Possibly browser is closed.
-
@vitsh1974 said in Закрыть принудительно поток:
@fox
вот у меня такой код ( может чего то не хватает?
да все верно -- у меня есть ряд вызовов без браузера...
может они как то влияние оказывают.
если они - то хотелось бы их исключить .... ето простые гет запросы на получнеие даннх/////Browser started, need to update running browser label
if (EventType == "browser_add") {
let CurrentValue = parseInt($("#BrowserNumber").html())
$("#BrowserNumber").html((CurrentValue + 1).toString())/////Add browser to viewer AddBrowser(EventData["browser_id"], EventData["thread_number"]) } /////Browser finished, need to update running browser label if (EventType == "browser_remove") { let CurrentValue = parseInt($("#BrowserNumber").html()) $("#BrowserNumber").html((CurrentValue - 1).toString()) /////Remove browser from viewer RemoveBrowser(EventData["browser_id"], EventData["thread_number"]) }
Зачем вам создавать потоки и управлять его жизнью вручную? Используйте простой вызов функции:
Api.RunFunction("LoadUrl", {Url: "ip.bablosoft.com"})
Если нужно получить результат вызова:
var Result = await Api.RunFunction("LoadUrl", {Url: "ip.bablosoft.com"}) console.log("Page content is " + Result)
Если возможна ошибка во время выполнения:
try { var Result = await Api.RunFunction("LoadUrl", {Url: "ip.bablosoft.com"}) console.log("Page content is " + Result) }catch(e) { console.log("Function finished with error " + e) }
В мануале всё подробно расписано
-
все таки хотелось бы поподробнее про
InitBrowserViewer(); узнать
ее параметры и что на что влияет... вероятно ето то ли я что то неправильно делаю, то ли какой то бок.. так как реально получаеться что вроде как 1 поток 1 браузер, а висит 4 кнопки ( хотелось бы чтобы 1)возможно идут какие то бока ( были же -- утечка мозгов... може что то не допилили? могу тиам дать
-
@vitsh1974 said in Закрыть принудительно поток:
все таки хотелось бы поподробнее про
InitBrowserViewer(); узнать
ее параметры и что на что влияет... вероятно ето то ли я что то неправильно делаю, то ли какой то бок.. так как реально получаеться что вроде как 1 поток 1 браузер, а висит 4 кнопки ( хотелось бы чтобы 1)возможно идут какие то бока ( были же -- утечка мозгов... може что то не допилили? могу тиам дать
Как показывает практика по TeamViewer редко удаётся решить проблему. Создайте тестовый интерфейс с проблемой, экспортируйте и приложите его здесь в сообщении
-
пробовал вызывать Api.RemoveBrowser(4323)
да вроде как процесс ушел, но кнопочка показать браузер осталась
-
@vitsh1974 said in Закрыть принудительно поток:
пробовал вызывать Api.RemoveBrowser(4323)
да вроде как процесс ушел, но кнопочка показать браузер осталась
А куда она должна деться? Вы ведь просто скрываете браузер
-
Верстка сама не сверстается ))
-
вот код, фиксации утечек
GetBrowsers = Api.GetBrowsers();
GetTasks = Api.GetTasks();Object.values(GetBrowsers).forEach(function (Task) {
//Api.HideBrowser(Task.browser_id);
// console.log(Task);aa = _.where(GetTasks, { browser_id: Task.browser_id }); console.log(aa.length + ' ' + Task.task_id + ' ' + Task.browser_id); if (aa.length == 0) { Api.RemoveTask(Task.task_id); Api.Send("stop_thread", { thread_id: Task.task_id }); } // Api.RemoveTask(Task.task_id) // Api.Send("stop_thread", {thread_id: Task.task_id})
})