C ++ / Threading:没有构造函数的实例" std :: thread :: thread" >匹配参数列表

时间:2016-11-23 17:34:51

标签: c++ multithreading

我在线程方面遇到了一些问题,因为我对它很陌生。

我得到了:

  

没有构造函数的实例" std :: thread :: thread"   匹配参数列表

     

参数类型是(void())

正好在

 std::thread t1(TestPlay);
    void CMusicTCPDlg::OnBnClickedBtplaymusic()
    {
            std::thread t1(TestPlay);

            t1.join();
    }

    void CMusicTCPDlg::TestPlay()
    {
        if (CFugue::GetMidiOutPortCount() <= 0)
        {
            std::cerr << "No MIDI Output Ports found!";
            exit(-1);
        }

        std::cout << "Playing Notes..";
        CFugue::PlayMusicStringWithOpts(_T("C D E F G A B"), MIDI_MAPPER, 20);
    }

我已经参考了一些线程页面,大多数都有一个像我一样的简单示例。

Visual Studio建议我使用&amp;在调用函数之前,它不会使用它。 我是否必须使用BackgroundWorker?

如果这是重复的话,真的很抱歉。谢谢!

1 个答案:

答案 0 :(得分:8)

TestPlay是一个成员函数,这意味着它的类型为void (CMusicTCPDlg::)()

您需要提供绑定版本以允许线程调用它:std::bind(&TestPlay, this)。请注意,必须确保线程的存在时间不超过对象本身,否则将导致未定义的行为。 (它将在不存在的对象上执行函数)