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
好的,我已经考虑了一段时间了,我只能想出一个解决方案。 我的问题如下: -> 我正在处理 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