首页 > cef > CEF-CefPostTask
2017九月4

CEF-CefPostTask

有几种方式

#include "include/cef_runnable.h"

CefPostTask(TID_UI, NewCefRunnableMethod(this,&DUINativeWeb::OpenUrl,pszURL,iFlags,pszTargetFrameName,pszHeaders,pszPostData,iPostDataLen));

或者

#include "include/base/cef_bind.h"

#include "include/base/cef_bind_helpers.h"

#include "wrapper/cef_closure_task.h"

CefPostTask(TID_UI, base::Bind(base::IgnoreResult(&DUINativeWeb::OpenUrl),this,pszURL,iFlags,pszTargetFrameName,pszHeaders,pszPostData,iPostDataLen));

或者自己重载task

官方的解释总是最权威,有疑问看这里或者直接看代码中的说明: bind_helpers.h. 

传值方式 描述
this 或 对象指针

如果对象本身是一个RefCountedThreadSafe, 没有问题.

如果是个裸指针,应当尽量避免,除非你可以保证它的线程安全.

base::Unretained

注意:使用这个的前提是有其它同步机制保障对象的生命周期.

  1. 如果有其它同步机制保障对象的生命周期,可以使用Unretained()传递非引用计数的对象.

  2. 如果是一个非引用计数的对象,可以使用Unretained()封装起来.

base::Owned

如果是临时对象,或者担心任务执行完成后对象可能出现泄露,可以使用Owned, 表示由Task

持有对象的所有权,在结束时析构它.

base::Passed 如果要执行Task需要传入scoped指针,就可以使用它转换,它也可以避免拷贝,而是类似move语义.
base::ConstRef 类似常量引用,不希望bind过程出现拷贝,就可以使用它.
base::IgnoreResult 如果Task要调用的方法带有返回值,而你又不关心返回值就可以使用IgnoreResult来传入对象指针.

 

文章作者:hgy413
本文地址:http://hgy413.com/4249.html
版权所有 © 转载时必须以链接形式注明作者和原始出处!

本文目前尚无任何评论.

发表评论