【发布时间】:2018-04-14 00:23:55
【问题描述】:
我正在使用 Wt C++ 框架,需要将按钮与类函数连接起来。下面的代码工作正常,但需要在线程上运行函数 door_open_all 以允许同时使用其他操作。
Wt::WPushButton *open_doors_button = new Wt::WPushButton("open all");
container_box->addWidget(open_doors_button);
open_doors_button->clicked().connect(boost::bind(&Servicemode::doors_open_all, this));
需要一些类似的东西:
open_doors_button->clicked().connect(boost::threaded_bind(&Servicemode::doors_open_all, this));
【问题讨论】:
-
你不能在函数
Servicemode::doors_open_all()中启动一个新线程吗? -
显然不行,它不允许以这种方式使用非静态成员函数。
-
在
Servicemode::doors_open_all()内部,您可以启动一个线程来完成它的工作,如果需要的话,给它一个 lambda 函数。但实际上,您也可以在线程中运行非静态成员函数。 -
imho
bind太可怕了,我总是更喜欢 lambda -
Galik 你在函数中使用 lambda 的想法确实奏效了。如果需要,您可以将其发布为正确的答案。非常感谢。
标签: c++ multithreading boost bind wt