0

同時クライアント接続を受信するサーバーがあります。マルチスレッドを使用するサーバーを実装するためのモデルとして、NI が提供する MultiClientServer サンプルを主に使用しました。最大 4 つのクライアントが接続しており、各クライアントは内部変数に関する情報を送信しています。私の目標は、このデータを送信したクライアントに応じて別のタブに表示することです。各タブ要素のハンドルを保持する配列があります。

static int ClientTABHandle[4] = {0,0,0,0};  

クライアントが接続して ID を報告すると、ID は SetCtrlVal を呼び出すときに適切な ClientTABHandle を参照するために使用されます。例えば、

SetCtrlVal(boardTABHandle[clientInfoPtr->clientID],<control name>, <value>);

<> 内の値はシンボリックです。

現在、これにより、処理しているクライアントに応じて実行時に適切な TAB ハンドルを使用できますが、動的に参照する方法が見つかりません。UI コントロールは別々のタブにあるため、各コントロールにはそのタブ名のプレフィックスがあります。たとえば、TAB が TABPANEL1、TABPANEL2、TABPANEL3、および TABPANEL 4 と呼ばれる場合、最初の TAB の UI 要素は TABPANEL1_CONTROLNAME として参照されます。しかし、実行時にコントロールを参照する文字列を作成し、それを SetCtrlVal コマンドで使用するにはどうすればよいでしょうか? 私は Fmt を使用するのが好きではありません.Fmt を使用すると速度が低下するだけでなく、コントロール名に評価される文字列を使用する方法がわかりません。

4

1 に答える 1

1

あなたの質問how can I make a string at runtime that refers to a control and use that in the SetCtrlVal command?:
あなたのアプローチによって、後で、またはが必要なコントロールをプログラムで作成できる場合、答えはNewCtrl(,,,) 関数を試すことかもしれません。タブ パネルにコントロールを作成できるようになり、作成したコントロールごとに一意のハンドル (ControlID) が返されます。すべての情報はリンクにありますが、そのプロトタイプは次のとおりです。 SetCtrlValSetCtrlAttribute

int NewCtrl (int Panel_Handle, int Control_Style, char Control_Label[], int control_Top, int Control_Left);

NewCtrl を使用したサンプル コードは、
C:\Program Files (x86)\National Instruments\CVIxxxx\samples\userint\buildui.cws
C:\Program Files (x86)\National Instruments\CVIxxxx\samples\userint\ICOViewer.cws にあります。

于 2013-09-18T14:38:15.107 に答える