gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:56:01 25 4
gpt4 key购买 nike

我的 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

关于c++ - 如何从dll中的异步函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21463151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com