如何从dll中的异步函数返回值

时间:2014-01-30 17:18:41

标签: c++ multithreading dll std

我的dll有异步函数,它启动一个线程并立即返回。它接受事件对象的句柄(类型HANDLE),线程在完成时发出信号。这工作正常但是如何从它传递的函数返回结果并且没有发生错误?一个简单的bool类型就可以了。

我正在考虑使用GetLastError()类型的调用来获取最后一个函数的结果,但我并不是真的以这种方式出售。我也看了std :: future和std :: async,但我不确定我是否可以在dll函数中使用它!?我想到的另一个选择是使用GetOverlappedResult,但通常使用文件i / o,我不知道我是否可以将它用于我编写的自定义函数。

1 个答案:

答案 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代替