gpt4 book ai didi

c++ - 如何将带有参数的方法传递给线程以执行?

转载 作者:行者123 更新时间:2023-12-02 10:15:31 25 4
gpt4 key购买 nike

我有办法

void RobocopyCopy::monitoring_thread_method(std::string path_to_monior)
{
while (!m_bMonitorThreadShouldExit)
{
printf("HERE WE ARE!!!! Path is :: %s\n", path_to_monior.c_str());
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
}
}

我需要在后台启动它,所以我创建了一个线程,并希望将此方法作为参数传递
void RobocopyCopy::start_monitoring_thread(std::string path_to_monior)
{
m_bMonitorThreadShouldExit = false;
m_pMonitoringThread = std::unique_ptr<std::thread>(new std::thread(&RobocopyCopy::monitoring_thread_method, path_to_monior, this));
}

我收到这样的错误
>RobocopyCopy.cpp
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thr\xthread(238): error C2672: 'std::invoke': no matching overloaded function found
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thr\xthread(246): note: see reference to function template instantiation 'void std::_LaunchPad<_Target>::_Execute<0,1,2>(std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *> &,std::integer_sequence<_Ty,0,1,2>)' being compiled
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>,std::default_delete<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>>>,
1> _Ty=size_t
1> ]
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thr\xthread(245): note: see reference to function template instantiation 'void std::_LaunchPad<_Target>::_Execute<0,1,2>(std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *> &,std::integer_sequence<_Ty,0,1,2>)' being compiled
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>,std::default_delete<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>>>,
1> _Ty=size_t
1> ]
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thr\xthread(242): note: while compiling class template member function 'void std::_LaunchPad<_Target>::_Run(std::_LaunchPad<_Target> *) noexcept'
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>,std::default_delete<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>>>
1> ]
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thr\xthread(230): note: see reference to function template instantiation 'void std::_LaunchPad<_Target>::_Run(std::_LaunchPad<_Target> *) noexcept' being compiled
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>,std::default_delete<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>>>
1> ]
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thr\xthread(257): note: see reference to class template instantiation 'std::_LaunchPad<_Target>' being compiled
1> with
1> [
1> _Target=std::unique_ptr<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>,std::default_delete<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>>>
1> ]
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thread(49): note: see reference to function template instantiation 'void std::_Launch<std::unique_ptr<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>,std::default_delete<_Ty>>>(_Thrd_t *,_Target &&)' being compiled
1> with
1> [
1> _Ty=std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>,
1> _Target=std::unique_ptr<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>,std::default_delete<std::tuple<void (__cdecl RobocopyCopy::* )(std::string),std::basic_string<char,std::char_traits<char>,std::allocator<char>>,RobocopyCopy *>>>
1> ]
1>c:\tetavi_main2\tv_apps\tv_world2\tv_logic_cpp\robocopycopy.cpp(73): note: see reference to function template instantiation 'std::thread::thread<void(__cdecl RobocopyCopy::* )(std::string),std::string&,RobocopyCopy*,void>(_Fn &&,std::string &,RobocopyCopy *&&)' being compiled
1> with
1> [
1> _Fn=void (__cdecl RobocopyCopy::* )(std::string)
1> ]
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thr\xthread(238): error C2893: Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thr\xthread(238): note: With the following template arguments:
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thr\xthread(238): note: '_Callable=void (__cdecl RobocopyCopy::* )(std::string)'
1>c:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\thr\xthread(238): note: '_Types={std::basic_string<char,std::char_traits<char>,std::allocator<char>>, RobocopyCopy *}'
1>Done building project "TV_Logic_CPP.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========


我究竟做错了什么?

最佳答案

 m_pMonitoringThread = std::make_unique<std::thread>(&RobocopyCopy::monitoring_thread_method, this, path_to_monior);

关于c++ - 如何将带有参数的方法传递给线程以执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62116499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com