2

私は、多くの-loopsTListによって継続的に処理されるアイテムを持っています。forリストの視覚的表現の順序を並べ替えるために、リスト内の項目を交換する必要がある場合があります ( a 内StringGrid)。

これらのアイテムを交換するにはどうすればよいですか?

私の予備的な考えは次のとおりです。

  • forループの間、アイテムを交換すべきではないと思います。
  • タイマーの間隔を非常に短い間隔 (たとえば 1 ミリ秒) に設定して、タイマーのイベントで交換を行う場合OnTimer、for ループにはその 1 ミリ秒の中断しかないと思います。

これは機能しますか?または、より良い代替手段はありますか?

4

1 に答える 1

2

TLista 内のアイテムの数が変わらないことを保証する限り、for ループ中にアイテムを交換してもまったく問題ありません。交換しようとしているアイテムのインデックスによっては、一部のアイテムが処理されないか、2 回処理される場合があります。

交換操作が for ループ内から呼び出されない場合、既に開始されている for ループは、それが完了するまで実行されます。タイマーのメッセージは、for ループと周囲のすべてのコードが完了するまで処理されないため、タイマーで「侵入」することは期待できません。

したがって、問題の解決策は次のようになります。

  • forループ内でアイテムを交換し、
  • スレッド化ソリューションを使用して、1 つのリストで 2 つの異なることを同時に実行できるようにします (これには、スレッドについての学習が必要になる場合があります)。
  • for ループが完了するまで待ってから交換します。
  • 必要な時間を短縮するために for ループを複数のスライスに分割する、または
  • タイマーを使用して複数の for ループを開始し、その間にプログラムに息抜きの時間を与えます。
于 2015-05-14T16:01:16.957 に答える