我怎样才能在ansi c windows lib中的一个线程中传递参数?

时间:2010-05-27 05:17:00

标签: c winapi

            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 个答案:

答案 0 :(得分:2)

CreateThread允许您传入类型void *的单个参数,并使用参数调用线程过程。

如果你想传递一个类型为T sizeof(T) <= sizeof(void *)的参数,你可以简单地在void *的调用中将你的参数转换为CreateThread并将其转换回你的类型你的线程程序。

但是如果sizeof(T) > sizeof(void *)你需要创建一个能够保存你的论点的结构。然后,您将指向CreateThread调用的指针(作为void *)。

将指针传递给结构时,您需要确保它具有适当的生命周期。最简单的方法是在调用CreateThread之前在堆上分配结构,然后释放线程过程中的内存。

答案 1 :(得分:1)

您已经使用“&amp; dDifference”传递参数。

检查example如何创建线程。

答案 2 :(得分: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); 


 //dDifference is the thread parameter