Xpoint
   [напомнить пароль]

Асинхронный вызов XPCOM-метода

Метки: [без меток]
2007-10-08 14:22:10 [обр] hades[досье]
Создал XPCOM расширение, в интерфейсе которого есть ф-ция Func1(arg);
если я из скрипта вызываю ее
var res = obj.Func1(arg);
FF вешается, пока ф-ция не отработает. Как этого избежать? как в бэкграунде запустить выполнение и ждать завершения?
нигде не могу найти ответ....
Помогите, плз! Смысл прост: я вызываю функцию, расширение что-то делает, а мозилла показывает какой-нить прогресс бар с кнопочкой прервать. как это сделать? замучался уже? как только вызываю ф-цию.-все дохнет. :-(
спустя 1 час 31 минуту [обр] Владимир Палант(434/4445)[досье]
М hades[досье]
Прошу давать осмысленные названия темам.
спустя 3 минуты [обр] Владимир Палант(434/4445)[досье]
сообщение промодерировано

> FF вешается, пока ф-ция не отработает.

JavaScript выполняется в том же потоке, в котором работает пользовательский интерфейс. Соответственно, ваша функция останавливает все. Очевидное решение: создавайте новый поток, а результат(ы) возвращайте в виде событий в основной поток. Смотреть надо PRThread и все, что с ним связано.

спустя 19 часов [обр] hades[досье]
нитку сделал, все работает, но возник попрос:
как проверить, жива ли нитка еще? и как ее принудительно грохнуть?
спустя 3 часа 5 минут [обр] Владимир Палант(434/4445)[досье]
как проверить, жива ли нитка еще?

Посылайте событие основному потоку при завершении.

и как ее принудительно грохнуть?

А вот это очень не рекомендуется. Вместо "принудительно грохнуть" нужно передать ей, что она должна завершиться. Думаю, это можно сделать опять же с помощью сообщения (PREventQueue?).

спустя 21 час [обр] hades[досье]
дело в том, что я использую стороннюю библиотеку, поэтому, когда я в потоке вызываю ф-ци, пока она не отработает, я не смогу прервать процесс.
спустя 1 день 4 часа [обр] Владимир Палант(434/4445)[досье]
А вот это уже проблема с данной библиотекой. И если она не рассчитана на то, чтобы операции прерывались посередине, то вам не стоит этого делать.
спустя 5 дней [обр] hades[досье]
блин, вроде ничего не менял, опять вешаемся на
observerService->NotifyObservers(NULL, "MyCommand", NULL);
складывается впечатление, что из асинхронной ф-ции(PR_CreateTread) нельзя кидать сообщения в ява скрипт :-(
Подскажите, Плз! С Ума уже схожу, млин.
Задача такая: из яваскрипта вызывается XPCOM ф-ция(с++), которая порождает новый процесс. Этот процесс что-то делает и, скажем, кидает событие в яву, что я завершился. как сделать?
Процесс создал, все нормально, Но как теперь корректно кинуть событие, чтобы ява нормально отработала??
Powered by POEM™ Engine Copyright © 2002-2005