C/C++ 多个指针?

C/C++ multiple pointers?

好的,我已经考虑了一段时间了,我只能想出一个解决方案。 我的问题如下: -> 我正在处理 USB 闪存 -> 我将它的大小分成 3 部分 -> 我有3个线程,每个线程都有一个指针,3个部分分配给树线程;

现在这是让我头疼的部分: 如果我只有一个处理 USB 的句柄,并且如果对于每个线程,我使用我拥有的唯一句柄设置一个指针,那将是一团糟。

Theard 1 将指针设置为 0;

线程 2 将指针设置为 100;

线程 3 将指针设置为 500;

对于每个线程,指针将位于 500,因为这将是他最后到达的位置。

我想让每个线程都从一个单独的地方开始。 我认为解决我的问题的唯一方法是为每个线程设置不同的句柄,但我发现该解决方案非常糟糕且不切实际。 如果有人知道更好地解决我的问题,我会很高兴! 不管怎样,谢谢!

这是我使用的 2 个函数(hanlde 和指针):

指针:

DWORD WINAPI SetFilePointer( _In_ HANDLE hFile, _In_ LONG lDistanceToMove, _Inout_opt_ PLONG lpDistanceToMoveHigh, _In_ DWORD dwMoveMethod );

处理程序:

    HANDLE WINAPI CreateFile(
      _In_     LPCTSTR               lpFileName,
      _In_     DWORD                 dwDesiredAccess,
  _In_     DWORD                 dwShareMode,
  _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  _In_     DWORD                 dwCreationDisposition,
  _In_opt_ HANDLE                hTemplateFile
  _In_     DWORD                 dwFlagsAndAttributes,
);

不能有多个文件指针指向同一个文件(或者更确切地说,同一个文件对象)。有几种解决方法:

  • 多次打开同一个文件(在你的情况下是设备),这将为你提供独立的文件对象,每个对象都有自己的当前位置。

  • 使用 I/O 不使用当前位置指针的操作,例如异步 I/O 像 WriteFileEx

  • (作为先前想法的变体)使用内存映射 I/O,即 MapViewOfFile