尝试多线程程序。 C ++ / CLI

时间:2013-04-11 13:13:14

标签: multithreading c++-cli createthread

嘿,我正在尝试在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
对我的任何帮助都会有很大的帮助,因为它对我的大学(我认为是英国那么高级的年级)计算项目而且我的导师很快就会想要它。

1 个答案:

答案 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'

我觉得当你添加我上面提到的遗失的^时,这个会消失。