Когда вы создаете новый поток, используя ThreadStart()
, как передать несколько аргументов функции?C++/CLR Передача нескольких аргументов в потоках
Вот пример:
using namespace System;
using namespace System::Threading;
public ref class Animal
{
public:
void Hungry(Object^ food, int quantity);
};
void Animal::Hungry(Object^ food, int quantity)
{
Console::WriteLine("The animal eats " + quantity.ToString() + food);
}
void main()
{
Animal^ test = gcnew Animal;
Thread^ threads = gcnew Thread(gcnew ParameterizedThreadStart(test, &Animal::Hungry));
threads->Start("Grass", 1); //need to pass 2nd argument!
}
Он отлично работает с только один аргумент (если я удалю количество ИНТ и просто Object^пищи), поскольку ParameterizedThreadStart занимает лишь Object^
Вы передаете аргумент Нить :: Start() метод. Вызываемая функция должна принимать один аргумент Object ^. Верните его в String^с помощью safe_cast. –
@HansPassant Хорошо, я смог заставить его работать, как вы сказали, но как передать несколько аргументов? Также мне пришлось изменить ThreadStart() на ParameterizedThreadStart() – Joesph
Я обновил вопрос – Joesph