gpt4 book ai didi

c - c客户端调用c dll函数是异步的吗?

转载 作者:太空狗 更新时间:2023-10-29 16:05:20 24 4
gpt4 key购买 nike

我制作了一个只有一个函数的简单 c dll(在 VS 2017 中)。我使用来自另一个 c 客户端程序的这个 dll 函数。调用是否异步(在与调用客户端程序运行不同的线程中)?如果不是那么我需要运行异步并且如果 dll 函数是一个长时间的过程(或者当它想要通知调用程序的事件时)我需要从 dll 调用调用(客户端)程序中的回调函数管理事件(我想使用函数指针)。

dll代码为:

#include <stdio.h>

__declspec(dllexport) void DllFunction() {
for (long i = 1;i <= 300000;i++) {
printf("dll\n");
}

}

而c客户端程序是:

#include <stdio.h>
__declspec(dllimport) void DllFunction(void);

int main() {
DllFunction();
for (long i = 1;i <= 300000;i++) {
printf("client\n");
}
return 0;
}

运行之前的客户端代码我认为两个 printf 命令(dll 和客户端)之间没有干扰!

已更新

首先要做的事...搜索后我意识到我们可以将回调功能与异步调用分开。我们可以有一个回调函数,驻留在调用(客户端)代码中,并从一个 dll 长时间进程调用,以通知例如本文中非常好的描述的进度: Using callbacks in DLLs

所以它仍然是关于异步的第二个问题...... CreateThread() 函数呢。我可以使用它吗?如果是,必须在哪里使用?在 dll 中还是在客户端代码中?

最佳答案

不,您可以将 DLL 调用视为普通函数调用。没有什么特别的事情发生,只是因为目标函数恰好存在于 DLL 中。

在实践中,可能有一个间接表或其他东西,所以可以有一个额外的跳转,但它本质上仍然只是直接跳转到代码,就像程序中的任何其他函数调用一样。

如果你想要异步性,你必须自己构建它,让一组函数在单独的任务/线程中运行并不是很简单。

关于c - c客户端调用c dll函数是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55354596/

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