• 注册
欢迎加入behaviac Q&A网站。behaviac是腾讯开源组件https://github.com/TencentOpen/behaviac 官方网站:http://www.behaviac.com/,提供各种文档和教程及手册 为了您及时的获得您最新问题的评论或者回答,请提供并验证您的邮箱
欢迎来到 behaviac Q&A。 您在bbs里的问题,管理员会当下就收到通知,不要担心管理员看不到您的问题。也请在bbs里提供您的email,这样就可以第一时间收到关于回答,评论的email的通知了。 为了节省大家的时间,请表达好你的问题,提供必要上下文,版本号,平台信息,重现步骤等。

版本3.3.16支持多线程吗

1 喜欢 0 不喜欢
309 浏览
在多线程中调用

bool btload(const char* relativePath, bool bForce = false);

void btsetcurrent(const char* relativePath);

virtual EBTStatus btexec();

这些函数有没有问题?
最新提问 4月 28, 2016 用户: ttkxx (350 分)
修改于 8月 22, 2016 用户:jonygli

1个回答

0 喜欢 0 不喜欢
 
已采纳
btexec可以在多线程中并行的运行。

但是btload,btsetcurrent等需要在主线程或某一个统一的线程中运行。
最新回答 4月 28, 2016 用户: jonygli (57,510 分)
采纳于 4月 28, 2016 用户:jonygli
主线程中

behaviac::Agent::Register<CAI>();
behaviac::Workspace::GetInstance()-》SetFileFormat(behaviac::Workspace::EFF_cpp);

线程1

   创建实例A 调用btload和btsetcurrent

线程2

    创建实例B 调用btload和btsetcurrent

这样是可以的吗?
主线程中

behaviac::Agent::Register<CAI>();
behaviac::Workspace::GetInstance()-》SetFileFormat(behaviac::Workspace::EFF_cpp);

创建实例A 调用btload
创建实例B 调用btload

线程1

 A.btsetcurrent
 A.btexec
   
线程2

 B.btsetcurrent
 B.btexec
哦 btload 连这个也不是线程安全的
btload内部实际上调用的是Workspace::Load,实际上是从cache总get的
哦   那么behaviac::Workspace::GetInstance()->DebugUpdate();这个我应该放在哪里调呢?
这个你搜索文档吧,都有说明的
好的 谢谢!
前面说 btload,btsetcurrent等需要在主线程或某一个统一的线程中运行

后面也说 线程1

 A.btsetcurrent
 A.btexec
   
线程2

 B.btsetcurrent
 B.btexec

 

不是很清楚 btsetcurrent是不是线程安全?
btsetcurrent不是线程安全的。里面没有同步。

这些是最基本的函数。如果需要同步的话,可以自行封装。
好的   谢谢
...