2017-05-04 52 views
0

好的,我一直在想這個問題一段時間,我只能想出一個解決方案。 我的問題是以下幾種: - > Im處理USB閃存 - >我將其大小分爲3部分 - >我有3個線程,每個線程都有一個指針,並且這3個部分分配給樹線程;C/C++多指針?

現在這是錯誤的我的頭部的部分: 如果我只有一個處理handeling usb和如果,對於每個線程,我設置一個指針使用唯一的處理我有,這將是一個reall混亂。

Theard 1將指針設置爲0;

線程2將指針設置爲100;

線程3將指針設置爲500;

對於每個線程,指針將在500處,因爲它將是他將要做的最後一個地方。

我想讓每個線程都從一個地方開始。 我認爲我的問題唯一的解決方案是每個線程都有不同的句柄,但是我發現這個解決方案非常糟糕和不切實際。 如果有人知道我的問題更好的解決方案,我會愛上! 無論如何,謝謝!

這是2個功能IM使用(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, 
); 
+0

一個指針始終是一個好主意。你應該創建一個線程安全的東西,它包含指針並且可以將數據分發到所有線程 –

+0

但是我需要爲每個線程設置一個指針,全部在同一個文件中。 「安全」的方式或我對它的方式有1處理每個線程,但這似乎是不夠的 – jeyejow

回答

3

不能有多個文件指針到相同的文件(或者說,相同的文件對象)。還有周圍的一些方法:

  • 打開同一個文件(設備在你的情況)幾次,這將讓你獨立的文件對象和每次都會有它自己的當前位置。

  • 使用不使用當前位置指針的I/O操作,例如,異步I/O等WriteFileEx

  • (如在以前的想法的變化)使用存儲器映射的I/O,即MapViewOfFile多個線程

+0

該死的我怎麼沒有想到'MapViewOfFile' xD是的,在理論上解決了我的問題,必須使每個線程都有新的句柄!非常感激! – jeyejow