我在源代码中使用boost C ++库创建了一个不同于主要线程的独立线程:
boost::thread t(&initSynthesis);
我想知道何时执行此initSyntesis()函数(或线程t),以便我可以在最初使用以下方法隐藏的窗体上显示按钮:
button1->show();
但问题是我从表单类的constructor
创建了线程t并且initSynthesis
函数不属于此类,因此我无法显示执行此功能时的按钮。如何解决这个问题?
答案 0 :(得分:2)
您可以将button1
传递给initSynthesis
,然后在initSynthesis
中,您可以拨打button1->show();
。
请注意,button1
应该通过引用传递,而不是通过值传递。
void initSynthesis(System::Windows::Forms::Button^% button1)
{
button1->show();
//Do something else
}
//Thread will call 'initSynthesis' with 'button1'
boost::thread t{ &initSynthesis, button1 };
答案 1 :(得分:0)
根据您对其他答案的评论,您似乎正在使用带有C ++ / CLI的boost线程。 高度适合使用.Net thread代替。
使用.Net线程,您的问题的答案与其他答案非常相似,除了您不需要明确传递按钮。允许.Net中的线程方法是实例方法,而不会跳过任何额外的箍,因此您可以像正常一样访问实例字段。
public ref class MyWindow
{
Button^ button1;
void foo()
{
Thread^ t = gcnew Thread(gcnew ThreadStart(this, &MyWindow::InitSynthesis));
t->Start();
}
void InitSynthesis()
{
// Do work
// OK, work's done, show the "Next" button.
this->button1->Show();
}
}