【问题标题】:How are we using Arguments in the Thread我们如何在线程中使用参数
【发布时间】: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


【解决方案1】:

不幸的是,对于诸如“程序员为什么要这样做?”之类的问题的最佳答案。是问他们。这通常是唯一令人满意的答案。在这样的事件中,原来的程序员已经不在了,不幸的是,一个令人满意的答案是极不可能的。

也就是说,我可以告诉你的是,在这种情况下,可能是这个程序员似乎正在使用一种技术,允许他将多个参数传递给线程函数。通常,线程函数只接受 1 个参数。通过传递一个结构,程序员可以有效地传递多个参数。

当然,由于您并没有真正传递这些参数,因此程序员必须将所有内容打包到一个结构中并在线程中解包。但是,效果大致相同:线程现在可以接受多个值而不是 1。

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 1970-01-01
    • 2015-08-14
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    相关资源
    最近更新 更多