将整数传递给在gcnew任务vc ++ .net中运行的函数

时间:2015-11-26 08:01:17

标签: .net multithreading visual-c++ c++-cli

我想将增量整数传递给将在.NET C ++中的其他任务中运行的函数。

Public: void loop()
          { 
           int i=0;max=100;
           while(i<max){
                Task ^newtask= gcnew Task (gcnew Action(&mainform::dosomething),cancellationtoken);
                i++;
                }
           }
Public: Void dosomething(int j)
        {

        }

这里我想将整数i传递给函数dosomething,它将成为新任务的方法。

请帮我解决将参数传递给中的任务的问题。

2 个答案:

答案 0 :(得分:0)

您可以使用带有Task参数的Action<Object> constructor版本,以便将所需的输入参数(包括取消令牌)传递给任务执行的方法

示例:

ref class Test
{
public:
    void Loop()
    { 
        auto tokenSource = gcnew CancellationTokenSource();
        auto token = tokenSource->Token;

           int i = 0, max = 100;
           while (i < max)
           {
               auto tuple = gcnew tuple_t(i, token);
               auto newtask = gcnew Task(gcnew Action<Object^>(this, &Test::DoSomething), tuple, token);
               newtask->Start();
               i++;
           }
    }

    void DoSomething(Object^ state)
    {
        auto tuple = static_cast<tuple_t^>(state);
        int data = tuple->Item1;
        CancellationToken token = tuple->Item2;
        // ...
    }

private:
    typedef Tuple<int, CancellationToken> tuple_t;
};

答案 1 :(得分:0)

谢谢Sebacote。你帮我解决了这个问题。我可以将整数作为参数传递给任务。