簡體   English   中英

如何從DLL中的異步函數返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM