c - 我如何在 ansi c windows lib 中的线程中传递参数也可以使用?

标签 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 值,我该怎么做呢?

最佳答案

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

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

但是如果sizeof(T) > sizeof(void *)您将需要创建一个结构来容纳您的论点。然后,您将传递一个指向 CreateThread 的指针调用(作为 void * )。

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

关于c - 我如何在 ansi c windows lib 中的线程中传递参数也可以使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2918639/

相关文章:

c++ - 由 ShellExecuteEx 打开时,Windows 文件属性对话框中缺少数据

c - 如何使用 WAVEHDR

c - 为什么gsl没有单独的 vector *矩阵乘法函数?

c - 无法编译读取智能卡的 C 应用程序

c++ - I/O 完成端口与 QueueUserApc?

c++ - 如何确定 Windows 用户是否可以休眠(使用 C++)

c - 需要一些关于一行的解释(指针)

c - 有没有办法将字符串数组拆分为 token 上的字符串子数组

c++ - 如何获取没有分配盘符的卷的卷文件系统?

c# - 使用 'hwnd'注册到窗口消息