gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:20:40 25 4
gpt4 key购买 nike

嘿,我正在尝试在 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

对此的任何帮助都会有很大帮助,因为它对我的大学(我认为是美国的英国大四)计算项目和我的导师希望它在相对较快的时间内完成。

最佳答案

错误消息告诉您该怎么做:

function call missing argument list;     use '&MotionThread::MoveProjectile' to create a pointer to member         ^ 

Therefore, here's the correct syntax:

Thread^ MotionThread1 = gcnew Thread(
gcnew ParameterizedThreadStart(MoveProj, &MotionThread::MoveProjectile));
^

对于另一个,您当前正在尝试创建一个委托(delegate),但没有告诉它委托(delegate)应该指向什么方法。尝试这样的事情:
Thread^ MainThread = gcnew Thread(gcnew ThreadStart(this, &MyClass::MainMethod));
^^^^^^^^^^^^^^^^^^^^^^^^^^

编辑

我没有通读你的完整代码。如果您希望人们花时间帮助您,那么您需要花一些时间并花精力将其提炼成所需的东西。

但是,我会评论您遇到的错误。

错误 C2440:“正在初始化”:
无法从“MotionThread”转换为“MotionThread ^”

您在某处有一个引用类型的变量,但您在没有 ^ 的情况下使用它.这是有效的 C++/CLI,但没有一个托管 API 可以轻松使用它。将成员(member)切换为 ^并使用 gcnew .

错误 C3352:“ float Allformvariables::CalcCurrentVelocity(System::Object ^)”:
指定的函数与委托(delegate)类型“void (void)”不匹配

正如错误消息所说:您正在尝试构造一个不带任何参数并返回 void 的委托(delegate),而您传递的方法与该委托(delegate)不匹配。修复方法或切换到不同的委托(delegate)类型。

错误 C3754:委托(delegate)构造函数:成员函数“MotionThread::MoveProjectile”
不能在“MotionThread”类型的实例上调用

我有一种感觉,当您添加缺少的 ^ 时,这个会消失我上面提到的。

关于multithreading - 尝试多线程程序。 C++/CLI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15949738/

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