带参数的线程调用库函数

时间:2018-05-11 18:21:58

标签: c++ windows mingw

我试图在一个帖子中使用我的库的以下功能:

typedef void (*TIPO_FUNCION_APARCAR_COMMIT)       (HCoche hc);
typedef void (*TIPO_FUNCION_PERMISO_AVANCE)       (HCoche hc);
typedef void (*TIPO_FUNCION_PERMISO_AVANCE_COMMIT)(HCoche hc);
int PARKING2_aparcar(HCoche,void *datos,TIPO_FUNCION_APARCAR_COMMIT,
                                             TIPO_FUNCION_PERMISO_AVANCE,
                                             TIPO_FUNCION_PERMISO_AVANCE_COMMIT);

但是我无法弄清楚如何调用它,因为在CreateThread()中输入参数是LPVOID而我看不出如何使用它。

我尝试了这种语法,但它不起作用:

CreateThread(0, 0, fPARKING2_apagar, {&hc,(LPTHREAD_START_ROUTINE)fPARKING2_getDatos(hc), &commit, &goForward, &goForwardCommit}, NULL, NULL, &threadId);

我也尝试使用std::thread,但似乎我没有C ++ 11所以我无法使用它。

1 个答案:

答案 0 :(得分:1)

您尝试传递给fPARKING2_apagar()的{​​{1}}功能不符合CreateThread()期望的签名。线程函数的签名必须与ThreadProc()

的签名相匹配
CreateThread()

此外,您正尝试将匿名结构传递给DWORD WINAPI ThreadProc(_In_ LPVOID lpParameter); 的{​​{1}}参数。这也行不通。

您需要编写一个可以传递给lpParameter的包装函数,然后该包装器可以调用库函数。使用CreateThread()的{​​{1}}参数将用户定义的数据传递给线程函数,然后可以根据需要将其传递给库函数。

尝试更像这样的事情:

CreateThread()