我的dll有异步函数,它启动一个线程并立即返回。它接受事件对象的句柄(类型HANDLE
),线程在完成时发出信号。这工作正常但是如何从它传递的函数返回结果并且没有发生错误?一个简单的bool类型就可以了。
我正在考虑使用GetLastError()类型的调用来获取最后一个函数的结果,但我并不是真的以这种方式出售。我也看了std :: future和std :: async,但我不确定我是否可以在dll函数中使用它!?我想到的另一个选择是使用GetOverlappedResult
,但通常使用文件i / o,我不知道我是否可以将它用于我编写的自定义函数。
答案 0 :(得分:0)
乍得是正确的回调是安全而简单的方法
// 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代替