gpt4 book ai didi

c++ - 使用函数构造 std::thread

转载 作者:行者123 更新时间:2023-11-30 02:03:39 24 4
gpt4 key购买 nike

这个有效:

    std::thread t = std::thread(printf, "%d", 1);

这行不通:

t2 = std::thread(my_thread_func , std::ref(context));

std::thread t1 = std::thread(my_thread_func , context_add);

my_thread_func 定义:

int my_thread_func(long long *context_add)

上下文是一些结构..我正在尝试“通过引用传递”

错误:

function call missing argument list;

error C2661: 'std::thread::thread' : no overloaded function takes 2 arguments

>>> 编辑 <<<

很抱歉造成混淆...实际上我在 MainPage 的 public 中定义了 my_thread_func,所以我不能使用原生类型因此我认为值得尝试很长时间并给它地址。

/* test data types, context for thread function, in .cpp (not in namespace) */
typedef struct _test_context
{
HANDLE hHandle;
unsigned int flag;
}test_context_t;

test_context_t *context;
//Do something with its member
context_add = (long long *)context;
std::thread t2 = std::thread(sem_waiting_thread, context_add);

错误:

error C3867: 'App1::MainPage::my_thread_func': function call missing argument list; use '&App1::MainPage::my_thread_func' to create a pointer to member
error C2661: 'std::thread::thread' : no overloaded function takes 2 arguments

我的命名空间是这样的:

namespace App1
{
public ref class MainPage sealed
{
public:
MainPage();
public:
MainPage();
int my_thread_func(long long cotext);
..
};
}

<<<< 编辑 2 >>>我现在很好奇..这个简单的也行不通!

void f1(int n)
{
for(int i=0; i<5; ++i) {
// Print n
std::this_thread::sleep_for(std::chrono::milliseconds(10));
}
}
.
.
.

int n=0;
std::thread t2(f1, n+1); (//This didn't work,same error!)

.
.
.
but this worked!
std::thread t2;
.
.
.
t2= std::thread (f1, n+1);

从这里尝试:http://en.cppreference.com/w/cpp/thread/thread/thread

最佳答案

最好将您的函数定义为:

int my_thread_func(context& ctx);

然后您就可以传递对context 的引用。如果函数不应该修改 context 那么最好使用:

int my_thread_func(const context& ctx);

然后你可以像这样创建线程:

test_context_t context;
/* ... */
std::thread t = std::thread(my_thread_func , std::ref(context));

从您的代码看来您有一个指向上下文 的指针。您可能需要重新考虑这一点,并像我上面那样使用一个对象实例。如果上下文作为指针传递给函数,您可能还想将该指针更改为引用。但是,如果那不可能(或不可取),那么您仍然可以通过以下方式创建线程:

test_context_t* context;
/* ... */
std::thread t = std::thread(my_thread_func , std::ref(*context));

或者,您可以只使用普通指针:

int my_thread_func(context* ctx); // notice the different function's signature

test_context_t* context;
/* ... */
std::thread t = std::thread(my_thread_func , context);

关于c++ - 使用函数构造 std::thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11565886/

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