2016-11-03 2 views
0

Мне нужно создать поток в управляемом C++-коде (CLR) для вызова неуправляемой функции-члена класса C++, передающей std::string в качестве параметра. Нить вызывается, но получил std::string время приема как пустая строка:CreateThread pass std :: string as аргумент

управляемый код:

std::string param; 
CreateThread(0, NULL, (LPTHREAD_START_ROUTINE) &MyThread.Start, &MyThread, (DWORD) &param, NULL); 

неуправляемый код:

class MyThread 
{ 
    public: 
     MyThread(); 
     static void Start(std::string &param); 
}; 

void MyThread::Start(std::string &param) 
{ 
    std::cout << param << std::endl; <<=== param is empty here 
} 
+2

Есть несколько вещей, которые вызывают эту проблему, но неясно, поддерживаете ли вы переменную 'std :: string param' в течение жизненного цикла потока? Кроме того, вы передаете его как параметр ['dwCreationFlags' (https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspx). – txtechhelp

+0

Действительно, параметр был помещен в неправильное положение. Я предлагаю вам дать окончательный ответ. Спасибо за помощь. – Mendes

ответ

1

В частности, в ваш случай, вы передаете &MyThread в качестве параметра функции потока и передаете param как dwCreationFlags функции CreateThread, которая задает параметры создания потоков.

Кроме того, вы должны будете поддерживать param вокруг на всю жизнь потока.

Надеюсь, что это поможет.

+0

Вот и все. Решаемые. – Mendes

Смежные вопросы