壁に書かれている「Avoid Globals」を読みました。これは、どのように行うのが最善かという明白な質問につながります。
私は明らかに現在のプロジェクトでそれをやりたいと思っています。目標は、遠く離れた PC が、既に標準入力リーダーを持っているアプリケーションに「キーストローク」を送信できるようにすることです。アイデアは、保留中のキーストロークがないことを既存のコードに検出させ、「udp キーストローク」があるかどうかを確認し、ある場合はそれを詰め込んで、キーボード入力のように見せることです。侵襲性が最小限であり、他の人のコードにレトロフィットする必要はありません。
setup()
そこで、関数を使用してポートを開いてバインドする小さな UDP ソケット リーダーを作成しました。次にservice()
、ノンブロッキング 1 回を使用するループ内の関数、ループなし、今すぐselect()
読み取るものがあるかどうかを確認するだけです。その場合、ソケットからデータを読み取って何かを行い、それ以外の場合は 0 を返します。
// pseudo c
char c;
setup();
while (1)
{
c = check_for_keyboard_entry();
if ( c == 0 )
c = service();
handle_keypress( c );
do_a_bunch_of_other_stuff();
}
これを行う明白な方法は、いくつかのグローバルを使用してポート、タイムアウト、sockaddr などを 2 つの関数間で転送することです。しかし、あなたは熱心なグローバルですよね?
では、関数間で 6 つまたは 8 つの変数を転送する好ましい方法は何でしょうか?
で静的変数を使用する場合、ルーチンsetup()
からアクセスできますか?service()
malloc されて渡される構造体が機能すると思います。cleanup()
ソケットを閉じてメモリを解放する必要があります。
これは AC に関する質問です。いいえC ++!