- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个使用 CreateFileA 打开 COM 端口的例程。该函数创建为 DLL,我有一个 EXE(使用 VS2010)来调用以打开不同的 COM 端口。一个观察是,如果我使用相同的 EXE 打开不同的端口,返回的文件句柄号是不同的。如果我打开多个 EXE 实例并打开不同的 COM 端口,返回的文件句柄号是相同的。例如->1 exe 用于打开 COM 端口 11、12、13、14,它们返回文件句柄号 - 0x200、0x210、0x21c、0x2204 个 exe,每个打开一个 COM 端口,它们都返回文件句柄号 - 0x200。
我想知道这是否是由于 Windows 线程导致 exe 的每个实例都有一个单独的线程,因此文件编号相同?使用我的 exe 与 Ports 通信没有任何问题。了解这一点的任何线索都会有所帮助。 (另一个应用程序正在尝试使用此 DLL,但遇到返回相同文件句柄号的问题)
谢谢阿迪亚
最佳答案
HANDLE 的值只在一个进程内有效。更清楚地说,句柄被实现为某个内核对象表的索引(或偏移量)。该表存储在内核内存中并分配给特定进程,即每个进程都有自己的不同对象表。
由于句柄只是某些表的偏移量,而这些表对于不同的进程是完全不同的,因此您不能为不同的进程传递(或比较)HANDLE 的值。
回到您的案例,如果您的应用程序是简单且确定性的,那么当您重新运行该应用程序时,您很有可能获得相同的 HANDLE 值,这仅仅是因为操作系统很可能确定性地填充对象表。但是,它不能得到保证,您不能依赖它。
由于句柄不能按字面意思传递给不同的进程,Windows 有 DuplicateHandle如果一个进程想要将相同的对象传递给其他进程,则可以使用该函数。注意,使用 DuplicateHandle,源句柄只能在源进程中使用,而目标句柄只能在目标进程中使用。
关于c - 多个 CreateFileA 调用返回相同的文件句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16328924/
我设置了 Helm 柄和 Helm 柄。我有tiller-deploy。昨天,我可以定期运行了。但今天我收到此错误消息 Error: could not find a ready tiller pod
我以前已将分er安装到特定的 namespace 中。 我设置了一个环境变量来设置'tiller'命名空间-但我不记得该环境变量的名称-而且似乎无法通过网络搜索找到它。 这是什么 key ? 最佳答案
当我在 View 模型中使用如下界面时 class MainViewModel @ViewModelInject constructor( private val trafficImagesR
我正在尝试找到如何在某个 fragment 相关场景中定义 Hilt 的解决方案。我有以下设置: Activity 父 fragment 1 子 fragment 1 子 fragment 2 ...
Hilt 指出如果没有@Provides 注解就不能提供这个接口(interface): interface PlannedListRepository { fun getAllLists()
我的问题非常简单明了:两个注释/示例之间有什么区别: 例子一 @Singleton class MySingletonClass() {} @Module @InstallIn(FragmentCom
我是一名优秀的程序员,十分优秀!