2012-02-08 3 views
0

Я пытаюсь разработать плагин для браузера с использованием инфраструктуры Firebreath. Первое, что я хотел бы сделать, это сделать плагин способен делать traceroute. Пока я делаю это на Windows7. В настоящее время я решил использовать Win32API CreateProcess для вызова командной оболочки. Установив dwFlags = STARTF_USESHOWWINDOW, я могу скрыть окно командной оболочки во время выполнения.Использование Win32 API CreateProcess в FireBreath Framework

ПРОБЛЕМА: СозданиеProcess реализуется в методе run(), где я его вызывал, используя JS для тестирования. Когда я вызывал plugin(). Run(), traceroute работает хорошо, и результат был успешно написан в текстовом файле, как я и хотел. Однако во время выполнения браузер перестает отвечать на запросы, и, наконец, плагин разбился секунд после завершения traceroute. Поскольку я новичок в разработке плагинов и имею лишь немного знания на C++, мне интересно, почему возникла эта проблема. FYI, если бы я не скрывал окно командной строки, плагин сработал чудо - браузер был отзывчив, а traceroute был выполнен.

ответ

1

Это очень важно в любом плагине NPAPI (с FireBreath или иначе), который вы не блокируете основной (javascript) поток. То, что вы пытаетесь сделать, может быть сделано несколькими способами; Я бы, вероятно, передал обратный вызов, запустил новый поток, выполнил там процесс create, а затем запустил обратный вызов js, когда он завершит результат.

См. FireBreath Tips: Asynchronous Javascript Calls.

Единственное, на что нужно обратить внимание, - это то, что вам нужно прекратить поток (и процесс), если плагин закрыт во время разговора.

Смежные вопросы