Как я могу передать параметр в потоке в ANSI C Windows также может быть использована библиотека? - PullRequest
0 голосов
/ 27 мая 2010
            int NM_Generator = 1; 

            //Aray to store thread handles 
            HANDLE Array_Of_Thread_Handles[1];

            //variable to hold handle of North pulse
            HANDLE Handle_Of_NM_Generator = 0; 

            //Create NM_Generator Thread
            Handle_Of_NM_Generator = CreateThread( NULL, 0, NMGenerator, &dDifference, 0, NULL);  
            if ( Handle_Of_NM_Generator == NULL)   ExitProcess(NM_Generator); 

я хочу передать в него значение параметра double, как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 27 мая 2010

CreateThread позволяет передавать один параметр типа void *, и процедура потока вызывается с параметром.

Если вы хотите передать аргумент типа T, где sizeof(T) <= sizeof(void *), вы можете просто привести ваш аргумент к void * в вызове CreateThread и вернуть его к вашему типу в вашей потоковой процедуре.

Но если sizeof(T) > sizeof(void *), вам нужно создать структуру, которая будет содержать ваши аргументы. Затем вы передадите указатель на вызов CreateThread (как void *).

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

1 голос
/ 27 мая 2010

Вы уже передаете параметр с параметром & dDifference.

Проверьте пример о том, как создать тему.

0 голосов
/ 27 мая 2010

хорошо, я нахожу это

        //Create NM_Generator Thread
        Handle_Of_NM_Generator = CreateThread( NULL, 0, NMGenerator, &dDifference, 0, NULL);  
        if ( Handle_Of_NM_Generator == NULL)   ExitProcess(NM_Generator); 


 //dDifference is the thread parameter 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...