I've been having some problems with threading because I am very new to it.
I am getting a:
no instance of constructor "std::thread::thread" matches the argument list
argument types are(void() )
Precisely at
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);
}
I've reffered to some threading pages and most had a simple example like mine.
Visual Studio advises me to use & before calling the function but it won't work with it. Do I have to work with BackgroundWorker instead?
Really sorry if this is duplicate. Thank you!
TestPlay
is a member function, this means its type of void (CMusicTCPDlg::)()
.
You will need to provide a bound version to allow the thread to call it: std::bind(&TestPlay, this)
. Be aware that you MUST make sure the thread does not exist for longer than the object itself or you will cause undefined behavior. (It will execute a function on a non-existant object)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With