[英]How to return value from asynchronous function in dll
我的dll具有異步功能,該功能可以啟動線程並立即返回。 它接受事件完成時線程發出信號的事件對象(類型HANDLE
)的HANDLE
。 這工作正常,但是如何從它傳遞的函數中返回結果卻沒有發生錯誤? 一個簡單的布爾類型就可以。
我正在考慮使用GetLastError()這樣的調用來獲取上一個函數的結果,但是我並不是真的以這種方式出售。 我也看了std :: future和std :: async,但是我不確定是否可以在dll函數中使用它? 我考慮過的另一個選擇是使用GetOverlappedResult
但通常可以與文件i / o一起使用,我不知道是否可以將其用於編寫的自定義函數。
乍得是正確的回調是安全而輕松的方法
// 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代替
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.