gpt4 book ai didi

c++ - 有效地将参数传递给 C++ 中另一个线程中的函数

转载 作者:行者123 更新时间:2023-11-30 01:27:23 26 4
gpt4 key购买 nike

据我所知,可以使用指向结构的指针。但我想知道,有没有更有效或更优雅的方法来做到这一点?至少在使用结构时,不容易看出函数使用的参数是什么。

感谢任何有见地的回答。

最佳答案

这是一个使用 WIN32 API 的小例子:

#include <windows.h>
#include <stdio.h>

struct PARAMS
{
int i;
char* msg;
};

DWORD WINAPI myThread(void* parameter)
{
PARAMS* params = (PARAMS*)parameter;
printf("Received parameters: i = %d, msg = '%s'\n", params->i, params->msg);
return 0;
}

int main(int argc, char* argv[])
{
char msg[] = "Hi there.";
PARAMS params;
params.i = 1;
params.msg = msg;

HANDLE threadHandle = CreateThread(NULL, 0, myThread, &params, 0, NULL);
WaitForSingleObject(threadHandle, INFINITE);

return 0;
}

你说,“很难看出函数使用的参数是什么”。好吧,这取决于情况。如果您认为它不够“优雅”,您至少应该在那里留下一些有用的评论......如果您使用良好的命名并尝试编写代码,即 self 记录,那么使用结构就可以了.

这是一个包装 CreateThread 的示例,这样使用您的代码的程序员就不必知道您正在使用某种结构:

#include <windows.h>
#include <stdio.h>

class MyWrapper
{
private:
struct PARAMS
{
int i;
char* msg;
};

static DWORD WINAPI myThread(void* parameter)
{
PARAMS* params = (PARAMS*)parameter;
printf("Received parameters: i = %d, msg = '%s'\n", params->i, params->msg);
delete params;
return 0;
}

public:
HANDLE createThread(int i, char* msg)
{
PARAMS* params = new PARAMS;
params->i = i;
params->msg = msg;

return CreateThread(NULL, 0, MyWrapper::myThread, params, 0, NULL);
}
};

int main(int argc, char* argv[])
{
MyWrapper mw;
char msg[] = "Hi there.";

HANDLE threadHandle = mw.createThread(1, msg);
WaitForSingleObject(threadHandle, INFINITE);

return 0;
}

关于c++ - 有效地将参数传递给 C++ 中另一个线程中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8994224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com