未经许可,严禁转载。
起因
项目内容是CTP接收行情—策略决断—下单,怕策略决断会堵塞CTP回报导致漏接行情,于是决定采用多线程的方法,当CTP接收到行情后,启用新线程产生信号然后下单。
困难点
手头上的这本《C++ Primer Plus》并没有涉及C++多进程/多线程的讲解,于是只有上网搜索。搜到了初步建立多线程的方法,就是引入<thread>这个头文件(是在C++11标准下才可以),然后初始化一个线程
thread t1(function);
t1.detach(); //将t1扔进后台跑,如果你需要控制t1这个线程,其实并不推荐这么做
问题出在当我想用一个类成员方法的时候,不能直接写object->function这种形式的参数。其中object是某个类的实例指针。
解决方案
去StackOverFlow查询了一下,并没有任何直接的解答。搜到最多的是在类方法定义里面如何使用多线程调用当前类的其他方法,而不是实例调用,即时有,也是不是实例指针调用。
于是在我的不断尝试(瞎猫碰死耗子)中,终于找到一个解决方案。把代码粘贴在下面。
class B{
public:
B(int m): x(m){};
void print_b(int num){
if(num < x){
num = x;
}
for(int i = 0; i <= num; i++){
cout << i << endl;
}
}
private:
int x;
};
void func(){
B *b = new B(400); // 初始化一个指针
thread t1(&B::print_b, b, 300); // 这里是关键,三个参数,第一个指明类方法,注意这里不能使用b::print_b;第二个是类实例的指针;第三个是方法所需要的参数。
t1.detach(); // 把t1线程扔进后台
}
int main(int argc, char** argv) {
func();
cout << "进入下个程序" << endl;
// 其他程序逻辑
return 0;
}
这样一来,就可以在实例中多线程使用类方法了。