Lia*_*m P 4 c++ mfc visual-studio-2013
我在Visual Studio 2013中编写MFC程序,但不断出现以下两个错误
Error C2893 Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)'
和
Error C2672 'std::invoke': no matching overloaded function found
该错误与文件xthread行238有关
我在c ++ / MFC上还很新,我正在尝试编写一个将在系统时间后台运行的函数。
这是我正在使用的代码:
void task1(ExperimentTab& dlg)
{
while (true)
{
CString showtime = CTime::GetCurrentTime().Format("%H:%M:%S");
int x = dlg.m_showTime.GetWindowTextLengthA();
dlg.m_showTime.SetWindowTextA(_T(""));
dlg.m_showTime.ReplaceSel(showtime, 0);
}
}
void mainThread()
{
std::thread t1(task1);
t1.join();
}
Run Code Online (Sandbox Code Playgroud)
然后在按下按钮开始计时时调用此按钮,但是使用同一按钮也可以停止时间。
函数task1采用单个参数(用作线程主体),但在t1构造函数中未传递任何参数。编译器无法在没有方法参数的情况下创建std::invoke调用task1函数。
要修复它调用构造这样的:std::thread t1(task1, std::ref(dlg));其中dlg是ExperimentTab。std::ref确保dlg将通过引用传递给线程。
顺便说一句:从其他线程更新MFC组件可能会导致某些数据争用。另外- while(true)线程将每秒以秒分辨率更新多个计时器,从而消耗100%的CPU。
| 归档时间: |
|
| 查看次数: |
5202 次 |
| 最近记录: |