【发布时间】:2018-01-24 05:43:27
【问题描述】:
如何为 UWP 应用程序使用 std::thread 创建线程?抱歉,我在对象内创建成员函数线程所需的语法有问题。我刚开始在 Visual Studio 中使用 c++/cx。这是我的代码:
void MainPage::increment(int val)
{
for (int i = 0; i < val; ++i){
m_timer4++;
Sleep(100);
textBox4->Text = m_timer4.ToString();
}
}
void _4ThreadsUWP::MainPage::button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
m_timer->Start();
std::thread th(&MainPage::increment, this, 5);
}
编辑:
我遇到了这些错误:
错误1:
'std::invoke': no matching overloaded function found
错误2:
Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)'
【问题讨论】:
-
您的线程对象在创建后立即超出范围。你应该加入它,即
th.join();。 -
@Azeem 尽管我添加了
th.join(),但它仍然不能解决问题。感谢您的建议 -
我很久以前就放弃了
bind-style 语法,只使用一个 lambda:std::thread th([this]{this->increment(5);});。 -
@MatteoItalia 正是我想要的。谢谢!
-
我会把它移到答案中。
标签: c++ multithreading c++-cx