我试图在一个帖子中使用我的库的以下功能:
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所以我无法使用它。
答案 0 :(得分:1)
您尝试传递给fPARKING2_apagar()
的{{1}}功能不符合CreateThread()
期望的签名。线程函数的签名必须与ThreadProc()
:
CreateThread()
此外,您正尝试将匿名结构传递给DWORD WINAPI ThreadProc(_In_ LPVOID lpParameter);
的{{1}}参数。这也行不通。
您需要编写一个可以传递给lpParameter
的包装函数,然后该包装器可以调用库函数。使用CreateThread()
的{{1}}参数将用户定义的数据传递给线程函数,然后可以根据需要将其传递给库函数。
尝试更像这样的事情:
CreateThread()