これを行う方法を把握する際に問題が発生しています。私が最初にやろうとしていることを説明しようとします。同じスレッドでスロットを並列に呼び出すことはできますか?
まず、このクラスには読み取り専用ファイルが含まれています。このクラスは、この他のクラス(StorageProvider)を使用してこのファイルのブロックをアップロードします。そのクラスにはQNetworkAccessManagerが含まれています。ファイルのブロックをアップロードするときは、そのブロックをStorageProviderクラスに送信します。このクラスは、QNAMに送信するREST要求を使用します。 QNetworkReplyが完了すると、StorageProviderはこれをアップローダに通知します(そのブロックが完了したことがわかるようになります)。
アップローダ - > StorageProvider - > QNetworkAccessManager - >インターネット
これまでのところは良いですね。 QNAMで作成したリクエストでStorageHandlerが完了したときに聴くアップローダーにスロットを置くことができます。
QNAMはHTTP経由で同時に6つの要求を行うことができるので、StorageProviderがブロックで完了したことを通知し、独自のBlockIdが信号に接続されるようにしたいと考えていましたアップローダは、実行されたブロックだけでなく、完了したブロックを知ることができます。
これは、信号(blockId)がStorageProviderによって発行されるたびに呼び出されるスロットは、完了したIDを格納してから、アップロードされていない新しいものを探す必要があることを意味します(Forgot to mention私は既にアップロードされているIDのリストを持っているので、ID(0〜1000)を踏むときには、それも必要です。1.ファイルのインデックスを4MB前に送ります。2.すでに存在するブロックが入っている場合はブロックします。
私は「currentBlockId」を1つインクリメントするスロットを持っていて、次のものを見つけるまでアップロードすることができます。位置 "currentBlockId" * 4mb(ファイル内のインデックスはインデックスのように前方にプッシュされ、ランダムアクセスではありません。私たちが行っているファイルの終わりを言います)、このスロットは5つのアップロードのうちの1つが実行されるたびに呼び出されます。問題がありますか?私が質問しているのは、QNAMが別のスレッドで呼び出して、2〜5個の "finished()"シグナルが同時に出力され、同時にそれを処理するスロットを呼び出すということです?同様に、私はあまりにもその後何が起こるか分からない。私のコードはスレッド化されていないことに注意してください。理論的にはシグナルは正しくキューに入れられますか?そのスロットは次々に5回呼ばれるでしょうか?
ありがとう
no。 1つのスレッド、1つのコードの実行。何か他のスレッドがあることを意味します。 – UmNyobe