Как отправить строку в _beginthreadex, чтобы поток мог ее прочитать? - PullRequest
0 голосов
/ 08 января 2020

Я хочу использовать _beginthreadex и передать символьную строку, имя домена. Как правильно / наилучшим способом передать его?

  1. По самой переменной ( sDomain )?
    WCHAR sDomain[256] = {0};
    //...copy domain into sDomain
    UINT threadID = 0;
    HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Thread_SaveDomainName, sDomain, 0, &threadID);
Или по адресу переменной ( & sDomain )?
    WCHAR sDomain[256] = {0};
    //...copy domain into sDomain
    UINT threadID = 0;
    HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Thread_SaveDomainName, &sDomain, 0, &threadID);
Или я могу создать структуру и передать элемент структуры ( & sDomain [0] )?
    struct strDomain {TCHAR sDomain[256];};
    strDomain *sDomain = new strDomain[1]();
    //...copy domain into strDomain[0].sDomain
    UINT threadID = 0;
    HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Thread_SaveDomainName, &sDomain[0], 0, &threadID);

1 Ответ

1 голос
/ 09 января 2020

Ниже приведен простейший код для реализации, конечно, вы можете настроить некоторый тип для передачи, так как тип аргумента функции потока равен void, вы можете выполнить любое преобразование

#include <iostream>
using namespace std;

UINT Thread_SaveDomainName(LPVOID params)
{
    char* szDomain = (char*)params;
    cout<<szDomain<<endl;

    return 0;
}

int main()
{
    char* szDomain = "8080";
    UINT threadID = -1;
    HANDLE hThread = (HANDLE)_beginthreadex(NULL, 0, &Thread_SaveDomainName, (void*)szDomain, 0, &threadID);

    return 0;
}
...