如何知道在boost C ++中执行了某个boost线程?

时间:2016-05-24 03:59:36

标签: multithreading boost c++-cli

我在源代码中使用boost C ++库创建了一个不同于主要线程的独立线程:

boost::thread t(&initSynthesis);

我想知道何时执行此initSyntesis()函数(或线程t),以便我可以在最初使用以下方法隐藏的窗体上显示按钮:

button1->show();

但问题是我从表单类的constructor创建了线程t并且initSynthesis函数不属于此类,因此我无法显示执行此功能时的按钮。如何解决这个问题?

2 个答案:

答案 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();
    }
}