嘿,我正在尝试在c ++ / cli中多线程化我的程序,但我在创建线程时遇到的问题是我使用的代码是:
private: Void startThread() {
MoveProj.Velocity = Variables.Velocity;
MoveProj.ProjectilePos = Projectile1.ProjectilePos;
Thread^ MotionThread1 = gcnew Thread(gcnew ParameterizedThreadStart(MoveProj, MotionThread::MoveProjectile));
Thread^ MainThread = gcnew Thread(gcnew ThreadStart());
}
但我得到了错误
Error 44 error C3350: 'System::Threading::ParameterizedThreadStart' : a delegate constructor expects 2 argument(s) c:\users\gaz\documents\visual studio 2012\projects\projectilemotion\projectilemotion\Simulation.h 344
Error 89 error C3350: 'System::Threading::ParameterizedThreadStart' : a delegate constructor expects 2 argument(s) c:\users\gaz\documents\visual studio 2012\projects\projectilemotion\projectilemotion\Simulation.h 344
Error 45 error C3350: 'System::Threading::ThreadStart' : a delegate constructor expects 2 argument(s) c:\users\gaz\documents\visual studio 2012\projects\projectilemotion\projectilemotion\Simulation.h 345
Error 90 error C3350: 'System::Threading::ThreadStart' : a delegate constructor expects 2 argument(s) c:\users\gaz\documents\visual studio 2012\projects\projectilemotion\projectilemotion\Simulation.h 345
Error 43 error C3867: 'MotionThread::MoveProjectile': function call missing argument list; use '&MotionThread::MoveProjectile' to create a pointer to member c:\users\gaz\documents\visual studio 2012\projects\projectilemotion\projectilemotion\Simulation.h 344
Error 88 error C3867: 'MotionThread::MoveProjectile': function call missing argument list; use '&MotionThread::MoveProjectile' to create a pointer to member c:\users\gaz\documents\visual studio 2012\projects\projectilemotion\projectilemotion\Simulation.h 344
对我的任何帮助都会有很大的帮助,因为它对我的大学(我认为是英国那么高级的年级)计算项目而且我的导师很快就会想要它。
答案 0 :(得分:3)
错误消息告诉您该怎么做:
function call missing argument list; use '&MotionThread::MoveProjectile' to create a pointer to member ^
因此,这是正确的语法:
Thread^ MotionThread1 = gcnew Thread(
gcnew ParameterizedThreadStart(MoveProj, &MotionThread::MoveProjectile));
^
对于另一个,您当前正在尝试创建委托,而不告诉委托应该指向哪个方法。尝试这样的事情:
Thread^ MainThread = gcnew Thread(gcnew ThreadStart(this, &MyClass::MainMethod));
^^^^^^^^^^^^^^^^^^^^^^^^^^
我没有读完你的完整代码。如果您希望人们花时间来帮助您,您需要花些时间和时间。花费精力将其提炼到需要的东西。
但是,我会对你得到的错误发表评论。error C2440: 'initializing' : cannot convert from 'MotionThread' to 'MotionThread ^'
你有一个变量,它是一个引用类型,但是你在没有^
的情况下使用它。这是有效的C ++ / CLI,但没有一个托管API可以轻松地使用它。将会员切换为^
并使用gcnew
。
error C3352: 'float Allformvariables::CalcCurrentVelocity(System::Object ^)' : the specified function does not match the delegate type 'void (void)'
正如错误消息所示:您正在尝试构造一个不接受任何参数并返回void的委托,并且您传递的方法与此不匹配。修复方法或切换到不同的委托类型。
error C3754: delegate constructor: member function 'MotionThread::MoveProjectile' cannot be called on an instance of type 'MotionThread'
我觉得当你添加我上面提到的遗失的^
时,这个会消失。