これを行う方法を理解するのに問題があります。私が最初にやろうとしていることが何であるかを説明しようとします。
まず、読み取り専用ファイルを含むこのクラスがあります。このクラスは、この他のクラス(StorageProvider)を使用して、このファイルのブロックをアップロードします。そのクラスにはQNetworkAccessManagerが含まれています。ファイルのブロックをアップロードするときは、ブロックをStorageProviderクラスに送信し、StorageProviderクラスはQNAMに送信するRESTリクエストを使用します。QNetworkReplyが完了すると、StorageProviderはこれをアップローダーに通知します(そのブロックが完了したことを認識します)。
アップローダー->StorageProvider->QNetworkAccessManager->インターネット
これまでのところ良いですよね?StorageHandlerがQNAMで行った要求で完了したときにリッスンするスロットをアップローダーに配置するだけで済みます。
ただし、QNAMはHTTPを介して同時に6つのリクエストを実行できるため、StorageProviderがブロックで完了したことを通知し、一意のBlockIdがその信号に接続されて、アップローダーが許可されるようにすることを考えていました。実行されたブロックだけでなく、実行されたブロックを知ること。
これは、信号(blockId)がStorageProviderによって発行されるたびに呼び出されるスロットが、実行されたIDを保存してから、アップロードされていない新しいIDを探す必要があることを意味します(すでにアップロードされているIDのリストなので、ID(0 ... 1000)をステップスルーするときは、次のことも行う必要があります。1.ファイルのインデックスを4mb前方にプッシュします。2。既存のブロックのリストをチェックインします。の。
だから、私の質問は次のとおりです。アップロードできる次のスロットが見つかるまで「currentBlockId」を1つ増やすスロットがあり、「currentBlockId」* 4mb(インデックス)の位置になるまでファイルを4mbずつ読み取ります。ファイル内はインデックスのように進められ、ランダムアクセスにはなりません。このインデックスがファイルの最後に到達すると、完了します)、5つのアップロードのいずれかが実行されるたびにこのスロットが呼び出されます。問題が発生しますか? ?私が尋ねている理由は、QNAMが異なるスレッドで呼び出しを行うため、2〜5個の「finished()」シグナルが同時に発行され、それを処理するスロットが同時に呼び出されるためです。 ?同様に、私はその時何が起こるかよくわかりません。私のコードはどれもスレッド化されておらず、理論的にはシグナルは正しくキューに入れられるべきであることに注意してください。スロットは次々と5回呼び出されますか?
ありがとう