在哪个线程中执行槽
In which thread are the slots executed?
假设我有四个线程,它们具有以下对象:
线程1:管理boost::signals2
对象。称之为s
线程2:管理X
对象和对s
的引用。调用X
对象o2
。成员函数X::do()
连接s
,在o2
上执行。
线程3:管理一个Y
对象和对s
的引用。调用Y
对象o3
。成员函数Y::do()
连接s
,在o3
上执行。
线程4:管理对s
的引用,emit
发出信号。
槽在哪里执行?所有这些都在线程4中,emit
调用发生的地方?超过线程1,因为这是信号的内存地址所在的线程?或者每个插槽在其对应的线程(2和3)上执行?
最明显的是插槽在thread 4
上执行,因为有信号发出(调用是同步的),但对我来说,执行函数的线程,或者一般来说,操作一个对象,其内存地址属于另一个线程(例如,在线程的堆上创建的对象,但在另一个线程中使用)似乎很奇怪。
访问"外部"线程是否至少比操作"我自己的"对象慢,或者根本没有区别?
槽在调用(发出)信号的线程上串行调用。为简单起见,您可以将信号简单地视为一个插槽列表。一旦某个线程调用了a信号,就好像该线程在该列表上迭代并调用了每个连接的槽位。
提到你的第二个问题,线程并不真正"拥有"从它分配的东西。内存和对象所有权是根据管理代码的方式来决定的。一般来说,任何线程都可以访问它的进程内存空间中的任何内存地址,只要你设法给它传递一个有效的地址到那个位置。
相关文章:
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 如何创建线程序列以按照启动顺序执行任务?
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- C++线程:如何在一个线程仍在运行时阻止另一个线程执行 (Win32)
- 如何制作一个只能在一个线程上同时执行的函数?
- 为什么即使调用了析构函数,C++11 中的分离线程也可以执行
- 工作线程在执行太快后永久休眠
- 超时后,线程睡眠不会继续执行
- 如何将带有参数的方法传递给线程以执行?
- 将执行循环拆分为多个线程 (1-N-1-N-1..)
- Visual Studio 发布模式阻止在调试模式下执行的代码.使用 WinHTTP 和多线程
- MFC执行线程问题
- Qt不能多次执行线程
- future::wait() 是否与 async() 执行线程的完成同步?
- std::线程何时执行线程
- 使用for循环执行线程
- 松弛的内存顺序效果是否可以扩展到执行线程的生命周期之后?
- 在C++11中,"不代表执行线程"的线程有什么意义?
- C++ 线程执行时间和另一个线程中的执行线程