Как мы используем аргументы в теме - PullRequest
0 голосов
/ 22 октября 2019

Я читал некоторый код, в котором программист впервые определил

   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;
 }

Может кто-нибудь любезно объяснить мне, что означает этот код.

1 Ответ

1 голос
/ 22 октября 2019

К сожалению, лучший ответ на такие вопросы, как "почему программист сделал это так?"это спросить их. Это обычно единственный удовлетворительный ответ. В таких случаях, когда первоначального программиста больше нет, удовлетворительный ответ, к сожалению, крайне маловероятен.

При этом я могу сказать, что то, что вероятно происходит в этомНапример, этот программист использует технику, которая позволяет ему передавать несколько аргументов в функцию потока. Обычно функции потока принимают только 1 аргумент. Передавая структуру, программист может эффективно передавать несколько аргументов.

Конечно, поскольку вы не передаете эти аргументы, программист должен будет упаковать все в структуру и распаковать ее в потоке. Однако эффект примерно такой же: поток теперь может принимать несколько значений вместо 1.

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