問題タブ [tlist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
multithreading - Delphi2006 - TMultiReadExclusiveWriteSynchronizer を備えた TList はありますか?
マルチスレッドの外部アプリケーションがあり、このアプリはカスタム dll を使用してそのスレッドからいくつかのことを行っています。
このdllには、データを読み書きする2つの関数がありますTList
。
それらのスレッドがそのリストを自由に読み取れるようにする必要がありますが、一度に書き込むことができるのは 1 つだけで、残りは書き込むまで待機する必要があります。
私の質問:
- BDS 2006 にTList
は TMREWSync 機能を備えたコンポーネントがありますか、または
-
私のアプリで使用できる無料のサードパーティ コンポーネントを知っているかもしれません。 TList
編集TThreadList.LockList
:私はそのリストに書き込むためだけに何かが必要です。
助けてくれてありがとう。
c++ - DelphitypcasttlistアイテムC++アプローチ
こんにちは私はいくつかの型キャストアプローチに関して1つの質問があります。いくつかのDelphiファイルをC++に翻訳しています。TListから派生したクラスのdelphi宣言があり、他の派生クラスの基本クラスです。
これは、2つの基本クラスTBaseItemとTBaseClassです。したがって、ここでは、TBaseItemから派生した新しいクラスTchildItemとTBaseClassから派生したTChildClassが宣言されています。TChildItemはメソッドSomeMethodをオーバーライドします。さらに重要なのは、TChildtClassがプロパティItemsをオーバーライドして、TBaseItemの代わりにTParentItemアイテムを返すようにすることです。
この例では、クラスの派生とプロパティのオーバーライドがいかに簡単にできるかを示したいと思いました。リストから適切なタイプのアイテムを取得するには、親(ベース)プロパティItemを呼び出し、適切なタイプに型キャストするだけです。これはデルフィのアプローチです。
コードのこの部分をC++に変換するにはどうすればよいでしょうか。現在、どのクラスからも派生していない新しい基本クラスを宣言しました。これには、パブリック変数Itemsがあります。
その後、
つまり、そのベクトルItemsなどの親(TBaseClass)のパブリック変数にアクセスし、適切な型に型キャストしたいということです...私の第一印象は、そのDelphiアプローチでは間違った方向に進んでいる可能性があるということです。
何を指示してるんですか?どうすればいいですか?
どうもありがとうございます!
arrays - セルの追加/削除時に配列をソートしておく最良の方法
使用されている Delphi のバージョン: 2007
こんにちは、
私はTecordの配列を持っています
配列をソートする方法を探していたところInfos
、賢い方法だと思われるものを見つけました。基本的に、配列の各セルへのポインターを追加する TList があります。次に、カスタムの並べ替え関数を使用してそれらを並べ替えます。次に、この TList を使用して、並べ替えられたセルを にTListView
設定OwnerData
して表示しtrue
ます。
ここで、ポインターを並べ替えたまま、セルを追加および削除できるようにしたいと考えています。さて、ここに私の問題があります。
- セルを追加するときは、呼び出してポインターのリスト全体を再ソートする必要があります
SortedInfo.Sort(@CompareInfo);
- セルを削除すると、TList を消去し、ポインターのリストを再構築して、再度並べ替える必要があります。
現在、私は膨大な数のセルを持っていないので、パフォーマンスの問題はありません。ただし、セルを削除するときにポインターを再構築し、配列が変更されるたびにすべてのポインターを並べ替えるのは、私には間違っているようです。私の問題がばかげているように見える場合は申し訳ありませんが、私は学ぼうとしています.
配列をソートしておく正しい方法はありますか? 新しいセルを「個別に」ソートする方法や、セルが削除されたときにポインターを有効に保つ方法がわかりません...
delphi - ListBox の文字列を List に変換する
TListBox コンポーネントには、一連の行 (文字列) が含まれています。このセットをリスト TList として取得するにはどうすればよいですか? 以下のコード例では、目的の結果が得られません。(コードはコンパイルされません)
ループを使用せずにこれを行うことは可能ですか? ありがとう!
delphi - TCategoryPanelGroup、パネルを削除
Delphi XE2 に取り組んでいます。サードパーティのコンポーネントやスイートはなく、派手なものはありません。
フォームに TCategoryPanelGroup (catPanGroup) を取得しました。必要な数の TCategoryPanel を簡単に追加できます。
パネルの順序は気にしませんし、(まだ) 見た目も気にしません。これらのパネル内にラベル、テキストボックス、ボタンを挿入できます。これらは正常に機能し、問題はありません。私はアプリケーションを終了し、(明らかな)リークはありません。
ただし、アプリケーションは少し動的であり、パネルを削除する必要があります。最後のパネルとしましょう。したがって、私の即時の反応は次のとおりです。
または:
平:
そして、物事がうまくいかなかったとき、私は:
では、エラーは何ですか? エラーが発生しない場合もありますが、アプリケーションを終了すると常に例外 (アクセス違反) が発生します。¿おそらく、TCategoryPanel 内に挿入したコントロールから来ているのでしょうか? いいえ、これらのパネルにコントロールを作成しなくてもアクセス違反が発生します。そして、例外は、パネルを削除する (または削除しようとする) ときにのみポップします。近いうちに XE3 で自宅で試してみます。
誰でも実行時に TCategoryPanel を作成および削除できますか?
arrays - 動的配列を含むレコードの汎用リスト
レコードの一般的なリストがあります。これらのレコードには、次のような動的配列が含まれています
次に、リストを作成し、次のように配列の長さを設定します
次に、データを変更し、リストに別の項目をMyArr
変更MyRec.Name
して追加します
MyRec.MyArr
最初のアイテムをリストに追加した後に変更すると、リストにMyArr
保存される変更も変更されます。ただし、他のレコード フィールドにはありません。
私の質問はMyRec.MyArr
、リスト項目に既に格納されている配列に変更が反映されないようにする方法です。
複数のレコードを宣言する必要がありますか。
delphi - キャスティング TListTListへ
type のリストがありTList<TForm>
ます。TList<TObject>
キャストして、次のように使用する必要があります。
サンプルは期待どおりに動作しますが、ジェネリック リスト間でこのようにキャストしても問題ありませんか? これにより、データ構造の破損などが発生しますか? ループ ( DoGetEnumerator
) の目的といくつかの文字列チェックにのみ使用します。つまり、アイテムの追加/削除はしません。
実際の関数はもう少し複雑です。listT
でRTTIを使用するための参照を取得しますTValue
。主な目標はFMX.Forms
、私のユニットにリンクすることではありません。
multithreading - Delphi では、TList を読み取りますスレッドセーフ?
単純なロギング クラスを作成しましたが、それがスレッド セーフであることを確認したいと考えています。基本的にLog
、RegisterLogger
とUnRegisterLogger
は異なるスレッドから呼び出されます。 Log
(多くの異なるスレッドから)頻繁RegisterLogger
に呼び出されます。UnRegisterLogger
基本的に私の質問は、「スレッドでの読み取りはTList<x>
安全ですか?」ということです。つまり、複数のスレッドTList
が同時にアクセスすることはできますか?
IExecutionCounterLogger
Log メソッドを持つインターフェイスです ( と同じシグネチャを持ちますTExecutionCounterServer.Log
)
もう少し背景として、これはこの質問の続きです。基本的に、(DCOM) DataSnap サーバーのすべてのメソッドにいくつかのインストルメンテーションを追加しました。また、すべての TDataSnapProvider OnGetData および OnUpdateData イベントにフックしました。