【发布时间】:2014-08-03 15:04:55
【问题描述】:
我在 cs 文件中有一个类:
public class ThreadData
{
private int index;
public ThreadData(int index)
{
this.index = index;
}
public static ThreadDataOutput DoWork(ThreadDataInput input)
{
return new ThreadDataOutput();
}
}
现在,我有 C++ 代码,它试图初始化一个新任务并为我们提供上述功能:
int numOfThread = 2;
array<Task^>^ taskArr = gcnew array<Task^>(numOfThread);
for (int i = 0; i < numOfThread; i++)
{
ThreadData^ td = gcnew ThreadData(i);
ThreadDataInput^ input = gcnew ThreadDataInput(i);
Task<ThreadDataOutput^>^ task = gcnew Task<ThreadDataOutput^>(td->DoWork, input);
taskArr[i] = task;
taskArr[i]->Start();
}
Task::WaitAll(taskArr, 300 * 1000);
以下代码在编译时返回 2 个错误:
- 除非创建委托实例,否则无法获取 'ThreadData::DoWork' 的地址
- 无法将参数 1 从 'AmadeusWS::ThreadDataOutput ^(__clrcall *)(AmadeusWS::ThreadDataInput ^)' 转换为 'System::Func ^
我也尝试在 cs 文件中声明这样的委托:
public static Func<ThreadDataInput, ThreadDataOutput> DoWork2 = delegate(ThreadDataInput taskDataInput)
{
return new ThreadDataOutput();
};
但我不知道如何从 c++\cli 代码中调用它
谁能帮助我理解如何定义可以接受参数的 cli 委托?
谢谢
【问题讨论】:
标签: multithreading delegates c++-cli task