вот проблема, которую я хочу укусить вам, одаренные кодеры: У меня есть пользовательский веб-контейнер, написанный на C++, который может общаться с javascript. от C++ для JS он может сделать синхронную функцию JS называет От JS в C++ это может сделать асинхронный C++ функция вызываетвеб-сотрудник связи без onmessage
С помощью этих инструментов, я должен сделать синхронный вызов от JS в C++ ... As Я не могу использовать систему обмена сообщениями (потому что оно подразумевает асинхронность в главном потоке, если я не пропустить что-то), мое первое предположение было использовать рабочий поток
«main.js» файл
var synctools = false;
var syncdata ="";
var myworker=new worker("demo_workers.js");
while(synctool == false){} //It s ugly but i haven t had any other ideas
«demo_workers .js "файл
CallCPPFile(param,callback); //call the c++ and c++ call callback when finished
function callback(data)
{
//do stuff
syncdata = data;
synctools = true; //this is supposed to stop the looping of the main js
}
К сожалению, synctools и syncdata недоступны из рабочего потока. Итак, вот несколько вопросов:
- есть ли другой способ связи между работником и основной нитью? Я попытался использовать объект навигатора, но он, похоже, тоже не работает (я не знаю, является ли его одним и тем же объектом навигатора между двумя потоками)
- Помимо веб-рабочего, вы видите другой способ, которым я могу достичь своей цели ? (Я пытался обещание тоже не повезло)
Спасибо за вашу помощь
Из того, что я видел с веб-работником, он целенаправленно ограничен тем, как вы можете его использовать. Только позволяет передавать копии в рабочий поток и не распределять ресурсы между потоками.Таким образом, вы можете передавать synctools и syncdata в качестве параметров, но если вы будете манипулировать им в одном потоке, вы не увидите изменений в другом потоке. Но если вам нужно только обработать рабочий поток и передать его обратно в основной поток, вы можете выполнить это с помощью postMessage(). – lintmouse
Что такое 'CallCPPFile' точно? .. и функция точки входа для определения того, какой ресурс должен отправлять HTTP-запрос? –
@ dustmouse: postMessage не является вариантом, поскольку я не могу получить отправленное сообщение в основной файл js, потому что он зацикливается. И если я прохожу цикл, я теряю синхронность, как возвращение javascript, а C++, в другом потоке, продолжает свою работу. –