【发布时间】:2019-10-22 05:01:39
【问题描述】:
我正在阅读一些程序员第一次定义的代码
typedef void* BLUEVELVETC_HANDLE;
然后他在结构中使用了这个变量。
struct ThreadArgs
{
BLUEVELVETC_HANDLE pSDK;
EBlueVideoChannel nVideoOutputChannel;
BLUE_U32 VideoModeExt;
EUpdateMethod UpdateFormat;
EMemoryFormat MemoryFormat;
};
然后他创建了一个新线程并将结构作为参数发送。
ThreadArgs args;
args.pSDK = pSDKOut;
args.nVideoOutputChannel = BLUE_VIDEOCHANNEL_A;
args.VideoModeExt = VideoModeExt;
args.UpdateFormat = UpdateFormat;
args.MemoryFormat = MemoryFormat;
unsigned int ThreadId = 0;
g_hThread = (HANDLE)_beginthreadex(NULL, 0, &PlaybackThreadFifoMode, &args, CREATE_SUSPENDED,&ThreadId);
最后在这个函数中他使用了参数。
unsigned int __stdcall PlaybackThreadFifoMode(void* pArg)
unsigned int __stdcall PlaybackThreadFifoMode(void* pArg)
{
ThreadArgs* pArgs = (ThreadArgs*)pArg;
BLUEVELVETC_HANDLE pSDK = pArgs->pSDK;
}
谁能解释一下这段代码的含义。
【问题讨论】:
-
我不太确定。程序员还在吗?也许你可以问他。
-
@Chipster 如果他是我肯定会问他。
-
你试过
man _beginthreadex吗?或者MSDN中的相应文章? AFAIR 线程过程接受通用 void 指针作为用户定义的参数。接下来,您进行类型转换,假设它与线程生成期间使用的类型相同。在这里看不到任何魔法,就像几年前一样 -
@shomit 将参数传递给线程,因为它在某处与线程函数一起使用,我相信。无法理解您的困惑。你明白什么是正确的线程吗?
-
我认为他正在尝试将数据传递给线程。如果我没记错的话,线程函数通常只接受 1 个参数。这样他就可以通过一个结构来传递多个参数。但同样,也不是 100% 确定。
标签: c++ multithreading c++11