Сообщение Re[5]: использования CEF в Visual Studio от 27.01.2017 13:54
Изменено 27.01.2017 14:12 Serginio1
Re[5]: использования CEF в Visual Studio
Здравствуйте, fddima, Вы писали:
Прошу прощения. Зарегистрировался на форуме. Но что то не могу отправить сообщение.
Задам и здесь. Суть такая
Я вызываю асинхронный метод
Который по окончании, вызывает метод С++
Вот код SetCallBacks
В вики вроде написано, что CefPostTask рабочий. Сейчас посмотри Id потоков
Прошу прощения. Зарегистрировался на форуме. Но что то не могу отправить сообщение.
Задам и здесь. Суть такая
Я вызываю асинхронный метод
var GetStringAsync = CC.GetPromise(TO.Id,"GetStringAsync", []);
GetStringAsync.then(result => alert("Fulfilled: " + result),
error => alert("Rejected: " + error.message) // Rejected: время вышло!
);Который по окончании, вызывает метод С++
void ContextForNetHandlers::AsyncCalBack(const wchar_t* TaskID, bool Successfully, tVariant* ReturnValue)
{
if (!CefCurrentlyOn(TID_UI)) {
// Execute on the UI thread.
// CefPostTask(TID_UI, base::Bind(&AsyncCalBack2, TaskID, Successfully,ReturnValue, CallbackContext));
CefPostTask(TID_UI, base::Bind(&SetCallBacks::AsyncCalBack, this->scb, TaskID, Successfully, ReturnValue));
return;
}
scb->AsyncCalBack(TaskID, Successfully, ReturnValue);
}Вот код SetCallBacks
//==================== Set CallBacs
bool SetCallBacks::Execute(const CefString& name,
CefRefPtr<CefV8Value> object,
const CefV8ValueList& arguments,
CefRefPtr<CefV8Value>& retval,
CefString& exception) {
if (arguments.size() == 1 && arguments[0]->IsFunction()) {
AsyncMetodCall = arguments[0];
CallbackContext = CefV8Context::GetCurrentContext();
cfn->scb = this;
return true;
}
return true;
}
void SetCallBacks::AsyncCalBack(const wchar_t* TaskID, bool Successfully, tVariant* ReturnValue)
{
CefV8ValueList args;
CefRefPtr<CefV8Value> retval;
CefRefPtr<CefV8Exception> exception;
if (CallbackContext.get() && CallbackContext->Enter()) {
args.push_back(CefV8Value::CreateBool(true));
args.push_back(NetObjectToNative::ConvertNetToCef(ReturnValue, true));
args.push_back(CefV8Value::CreateString(TaskID));
delete[] TaskID;
if (AsyncMetodCall->ExecuteFunctionWithContext(CallbackContext, NULL, args)) {
if (exception.get()) {
// Execution threw an exception.
}
else {
// Execution succeeded.
}
}
CallbackContext->Exit();
}
}В вики вроде написано, что CefPostTask рабочий. Сейчас посмотри Id потоков
Re[5]: использования CEF в Visual Studio
Здравствуйте, fddima, Вы писали:
Прошу прощения. Зарегистрировался на форуме. Но что то не могу отправить сообщение.
Задам и здесь. Суть такая
Я вызываю асинхронный метод
Который по окончании, вызывает метод С++
Вот код SetCallBacks
В вики вроде написано, что CefPostTask рабочий. Сейчас посмотри Id потоков
Да потоки разные. Сейчас буду рыть с очередью сообщений
Прошу прощения. Зарегистрировался на форуме. Но что то не могу отправить сообщение.
Задам и здесь. Суть такая
Я вызываю асинхронный метод
var GetStringAsync = CC.GetPromise(TO.Id,"GetStringAsync", []);
GetStringAsync.then(result => alert("Fulfilled: " + result),
error => alert("Rejected: " + error.message) // Rejected: время вышло!
);Который по окончании, вызывает метод С++
void ContextForNetHandlers::AsyncCalBack(const wchar_t* TaskID, bool Successfully, tVariant* ReturnValue)
{
if (!CefCurrentlyOn(TID_UI)) {
// Execute on the UI thread.
// CefPostTask(TID_UI, base::Bind(&AsyncCalBack2, TaskID, Successfully,ReturnValue, CallbackContext));
CefPostTask(TID_UI, base::Bind(&SetCallBacks::AsyncCalBack, this->scb, TaskID, Successfully, ReturnValue));
return;
}
scb->AsyncCalBack(TaskID, Successfully, ReturnValue);
}Вот код SetCallBacks
//==================== Set CallBacs
bool SetCallBacks::Execute(const CefString& name,
CefRefPtr<CefV8Value> object,
const CefV8ValueList& arguments,
CefRefPtr<CefV8Value>& retval,
CefString& exception) {
if (arguments.size() == 1 && arguments[0]->IsFunction()) {
AsyncMetodCall = arguments[0];
CallbackContext = CefV8Context::GetCurrentContext();
cfn->scb = this;
return true;
}
return true;
}
void SetCallBacks::AsyncCalBack(const wchar_t* TaskID, bool Successfully, tVariant* ReturnValue)
{
CefV8ValueList args;
CefRefPtr<CefV8Value> retval;
CefRefPtr<CefV8Exception> exception;
if (CallbackContext.get() && CallbackContext->Enter()) {
args.push_back(CefV8Value::CreateBool(true));
args.push_back(NetObjectToNative::ConvertNetToCef(ReturnValue, true));
args.push_back(CefV8Value::CreateString(TaskID));
delete[] TaskID;
if (AsyncMetodCall->ExecuteFunctionWithContext(CallbackContext, NULL, args)) {
if (exception.get()) {
// Execution threw an exception.
}
else {
// Execution succeeded.
}
}
CallbackContext->Exit();
}
}В вики вроде написано, что CefPostTask рабочий. Сейчас посмотри Id потоков
Да потоки разные. Сейчас буду рыть с очередью сообщений