我的 dll 有一个异步函数,它启动一个线程并立即返回。它接受事件对象的句柄(类型 HANDLE
),线程在完成时发出信号。这工作正常但我如何从它传递的函数返回结果并且没有发生错误?一个简单的 bool 类型就可以了。
我正在考虑使用 GetLastError() 类调用来获取最后一个函数的结果,但我并没有真正接受这种方式。我还查看了 std::future 和 std::async 但我不确定我是否可以在 dll 函数中使用它!?我考虑的另一个选择是使用 GetOverlappedResult
,但这通常适用于文件 i/o,我不知道我是否可以将它用于我编写的自定义函数。
Chad 是对的,回调是安全且简单的方法
// DLL:
__declspec(dllexport) void (*callback_function)(DWORD ret)=NULL;
DWORD _stdcall thread_function(LPVOID p)
{
// do something ...
if (callback_function) callback_function(some_return_value);
}
// DLL usage
DWORD return_value1=0;
bool done1=false;
void callback_function1(DWORD ret)
{
return_value1=ret;
done1=true;
}
void main()
{
callback_function=callback_function1; // set callbak function for DLL
done1=false; // invalidate return value
// here call you DLL function
for (;!done1;) Sleep(1); // wait for valid result ... also can add some timeout to avoid hang-ups
// now in return_value1 is the valid return value
}
也可以改用waitforsingleobject
我是一名优秀的程序员,十分优秀!