Закрыть принудительно поток



  • Добрый день, столкнулся с проблемой незакрытия браузера! реально работают около 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

    он вернёт объект со всеми запущенными функциями



  • @fox said in Закрыть принудительно поток:

    Api.GetTasks()

    а как разрушить?

    0_1571740244142_sk1.PNG



  • @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

    0_1571744282991_bassss.PNG



  • @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)

    0_1571747480685_sk1.PNG

    возможно идут какие то бока ( были же -- утечка мозгов... може что то не допилили? могу тиам дать



  • @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})
    

    })


Log in to reply