在托管c ++ /。net 4.0中创建对象的ConcurrentQueue

时间:2012-11-25 02:27:42

标签: .net c++-cli managed-c++

我一直在尝试更新我继承的一些托管c ++代码。我不知道任何c ++,但我在1.1天内参加了一个c#课程,所以我可以找到我的方式.Net。到目前为止,我使用ConcurrentQueue将工作从我的主线程发送到工作线程,结果很好:

fullQueue = gcnew ConcurrentQueue<int>();

..

fullQueue->Enqueue(someNumber);

现在我想尝试插入实际对象,以便我可以向工作人员发送更复杂的指令。但是,这不起作用:

public ref class workUnit
{
    int ptrOffset;
    System::String^ outputPath;
    public:
        workUnit(int offset, System::String^ path)
        {
            ptrOffset=offset;
            outputPath=path;
        }
};    

...

ConcurrentQueue test = gcnew ConcurrentQueue<workUnit ^>();

我明白了:

'System::Collections::Concurrent::ConcurrentQueue' : use of class generic requires generic argument list

'System::Collections::Concurrent::ConcurrentQueue::ConcurrentQueue' : the function template cannot convert parameter 1 from type 'System::Collections::Concurrent::ConcurrentQueue<T> ^'

显然,我遗漏了有关如何将对象插入队列的基本信息。在我的脑海中,我想我正在建立一个队列,它将保存对我稍后可以实例化的类对象的引用,因此CLR应该只需要知道将引入哪种引用类型,但显然这是不正确的。我错过了什么?

1 个答案:

答案 0 :(得分:1)

好像你错过了什么:)

using namespace System::Collections::Concurrent;

ref class WorkUnit
{
};

int main()
{
    ConcurrentQueue<WorkUnit^>^ test = gcnew ConcurrentQueue<WorkUnit^>();
}

您必须在初始化表达式的两边引用泛型类型&lt; WorkUnit ^&gt;