Передача параметров потока в Windows C ++ - PullRequest
6 голосов
/ 13 апреля 2011

В Windows c ++ следующее создает поток:

CreateThread(NULL, NULL, function, parameter, NULL, &threadID);

Это запустит «функцию» в новом потоке и передаст ей «параметр» как void * или LPVOID.

Предположим, я хочу передать два параметра в «функцию», есть ли лучший способ сделать это, кроме создания структуры данных, содержащей две переменные, и последующего преобразования структуры данных в LPVOID?

Ответы [ 4 ]

13 голосов
/ 13 апреля 2011

Нет, это единственный способ.Просто создайте структуру с двумя членами данных и передайте ее как void *

1 голос
/ 18 марта 2019
#include <windows.h>
#include <stdio.h>

struct PARAMETERS
{
    int i;
    int j;
};

DWORD WINAPI SummationThread(void* param)
{
    PARAMETERS* params = (PARAMETERS*)param;
    printf("Sum of parameters: i + j = \n", params->i + params->j);
    return 0;
}

int main()
{
    PARAMETERS params;
    params.i = 1;
    params.j = 1;

    HANDLE thdHandle = CreateThread(NULL, 0, SummationThread, &params, 0, NULL);
    WaitForSingleObject(thdHandle, INFINITE);

    return 0;
}
0 голосов
/ 11 мая 2011

Я думаю, что есть намного лучший способ, и я все время использую его во встроенном коде.Это на самом деле возникло из желания передать метод-член в функцию, которая очень похожа на CreateThread ().Причиной этого было то, что класс уже имел в качестве данных-членов (с соответствующими установщиками) все параметры, необходимые для потока. Я написал более подробное объяснение , к которому вы можете обратиться, если вам интересно.В статье, где вы видите OSTaskCreate (), просто мысленно подставьте CreateMethod ().

0 голосов
/ 13 апреля 2011

Это стандартный способ передачи параметра в поток, однако ваш новый поток не может получить доступ к любой памяти в процессе, так что что-то, что трудно передать, или много данных могут быть доступны как общий ресурс, если вы предоставите соответствующий контроль синхронизации.

...