【发布时间】:2015-10-03 00:16:37
【问题描述】:
我有这个标题:
class jmmvAsync
{
public:
static void run(LPCTSTR msg);
};
还有这个.cpp
void jmmvAsync::run(LPCTSTR msg){
MessageBox(NULL, msg, NULL, NULL);
}
我正在调用这个函数:
LPTCSTR file = "file";
thread t(jmmvAsync::run(file), 0);
线程函数有这样的结构:
thread::thread(void (*aFunction)(void *), void * aArg)
为什么我在调用“线程”时会得到错误的类型?
错误代码: 编译:错误 C2664:'tthread::thread::thread(void (__cdecl *)(void *),void *)':无法将类型为 'void' 的参数 1 转换为 'void (__cdecl *)(void * )'
thread 函数期望参数 1 为 void (__cdecl *)(void *) 而我的函数只是 void。我不知道如何使名为run 的函数与请求的类型相同。
【问题讨论】:
-
你试过了吗(
&jmmvAsync::run, file)? -
你不应该传递函数,而不是函数的返回值吗?
-
@RefugnicEternium 我收到此错误:'&' 需要值 L。而“文件”是
run的参数,而不是thread的参数。 -
@PaulRooney 你是什么意思?我正在尝试使用
thread函数执行异步任务,我需要传递一个异步执行的函数,该函数无效! -
@ProtectedVoid 传递给
thread的函数采用void*参数。它在调用时收到的void*是第二个参数。您正在传递调用函数的结果。