Uwo*_*wop 4 c++ qt multithreading boost
我的应用程序在启动时有多个线程。我需要线程 A 能够强制线程 B 运行一个函数(也有参数。)我试过在谷歌上搜索但找不到我需要的东西,很多堆栈溢出文章似乎与我在做什么。我不确定我是否只是为此使用了错误的术语,也许这就是我找不到所需信息的原因。如果他们的线程库中有一个选项,我愿意使用 Boost,如果有,如果你能指出一些示例代码的方向,我可以看看哪个能满足我的需要。我的应用程序也已经使用 QT,尽管我从未使用过 QT 线程库,所以我也不知道它是否包含这个。
基本上我需要做的是这个。
//Thread A
void ThreadA()
{
//Do work to get data
//Pass Data to another function, and have thread B run it.
ThreadB.Run(data,arg2,arg3);
}
Run Code Online (Sandbox Code Playgroud)
没有办法明确地做到这一点。您可以在线程之间传输消息,例如使用events,这将触发所需方法的调用。但是目标线程必须在循环中,等待消息。这是唯一一种可以强制线程进入另一个子程序的方法。
抽象例子:
// in ThreadB [the target thread]
std::vector<Message> messages;
bool wait_message;
// ...
while(wait_message) {
if(messages.size() > 0) {
// process messages
}
}
// ...
Run Code Online (Sandbox Code Playgroud)
对于另一个线程:
// in ThreadA
// ...
messages.push_back(Message("call_my_method", some_data));
// ...
Run Code Online (Sandbox Code Playgroud)
类Message(仅举例):
class Message {
private:
std::string _what;
void* _data;
public:
Message(const std::string& what, void* data) : _what(what), _data(data) { }
Message(const Message& inst) : _what(inst._what), _data(inst._data) { }
const std::string& what() const { return _what; }
void* data() const { return _data; }
};
Run Code Online (Sandbox Code Playgroud)
仅对于函数调用,您可以使用std::functionandstd::bind和 只传输回调,它提供一些固定的签名(例如void(void)),以及您的消息。
| 归档时间: |
|
| 查看次数: |
12043 次 |
| 最近记录: |