@evgenyt2000

Как передать два параметра в тред?

Как передать в тред 2 параметра: указатель на массив и его размер. Просто указателя недостаточно, а размер его потом там не определить.
Так сейчас:
int *array = new int[mSize];
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)a,&array,0,&tid);

int a(int *array)
{
    min = array[0]; max = array[0];
    for (i = 0; i < mSize; i++) { sum += array[i]; Sleep(12); }
    cout << "Sum   :" << sum << endl;
    for (i = 0; i < mSize; i++){if (min > array[i])  min = array[i];}
    cout << "Min   :" << min << endl;
    return 0;
}
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
15432
@15432
Системный программист ^_^
Можете создать new int[mSize+1], в первую ячейку записать размер, остальные использовать для своих целей... А в треде размер из этого же массива и извлечь
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Поскольку С++ - это объектный язык то обсуждение того как что-то передать надо вести в терминах объектов.
Этож не ассеблер. Смотрите на шапку функции по созданию треда.
HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES   lpThreadAttributes,
  SIZE_T                  dwStackSize,
  LPTHREAD_START_ROUTINE  lpStartAddress,
  __drv_aliasesMem LPVOID lpParameter,
  DWORD                   dwCreationFlags,
  LPDWORD                 lpThreadId
);


В ней lpParameter должен быть указателем на структуру из вашего массива и длины. Или просто вектор целых чисел в терминологии STD (std::vector)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы