2

これは GUI に関する一般的な質問です。GUI でプログラムを書いたことは一度もありませんでしたが、今では大学のためにやらなければなりません。C での最適なソリューション プログラミングは GTK+ であることがわかりました。

多くの例を見てきましたが、まだ理解できないことが 1 つあります。私のプログラムはサーバー/クライアント アプリなので、小さな GUI がある場合もバックグラウンドで実行する必要があります。それはどのように実現できますか?男を「開始」するには、gtk_main() ループを使用する必要があり、アプリケーションは常にこのループ内でブロックされます。fork() を使用して他のタスクを同時に実行する必要がありますか?

ありがとう、些細な質問ですみません。


イタリア語で説明するのは難しいですが、英語で説明すると最悪です :)

プログラムは、ネットワーク (LAN) を継続的にリッスンして、他のユーザーが到着して UDP メッセージをキャッチするかどうかを確認する必要があります。同時に、いくつかの条件が確認された場合 (たとえば、ローカル フォルダが変更された場合、このファイルを指定されたユーザーに送信する必要があります。これは、同時に複数のユーザーで発生する可能性があります)。サーバー (ファイルの送信) とクライアント (ネットワークのリッスン) を同時に行う必要があるアプリケーションは 1 つだけです。

GUI を実装する別の「クライアント」を持つというアイデアは、興味深いものになる可能性があります。

GUI を開発したことがないので、すべてのプログラムを作成し、最後に GUI を追加することを考えました。それが可能だ?

4

2 に答える 2

2

メインループに実行を依頼することで、他のタスクを実行します。GIO で IO を実行すると、これは自動的に処理されます ( http://developer.gnome.org/gio/stable/を参照)。しかし、一般的なケースでは、ここで説明されているように、g_idle_add()、g_timeout_add() などの関数を使用します: http://developer.gnome.org/glib/stable/glib-The-Main-Event-Loop.htmlおそらく g_io_add_watch() ここ: http://developer.gnome.org/glib/stable/glib-IO-Channels.html

ブロック IO (read()/fread() 呼び出しのようなもの) を行う必要がある場合は、スレッドを生成し、アイドル ハンドラを追加してそのスレッドが GUI ループに戻るようにする必要があります。メイン ループやスレッドを初めて使用する場合、これを理解するのは難しいため、GIO を使用することは優れたオプションです。

fork() を使用して IO を実行するプロセスを生成することもできますが、その場合は IO を使用してプロセスと通信する必要があるため、UI プロセスで IO を実行する必要を実際に回避することはできません。

于 2012-04-25T16:13:38.227 に答える
0

あなたのプログラムが具体的に何をしているのかについて、詳細を教えていただけますか? 現在の説明は漠然としているため、何を求めているのかを本当に理解するのは困難です。

元の質問の私の解釈に基づいた一般的なアドバイスを次に示します。

あなたのプログラムは「サーバー/クライアント アプリなので、小さな GUI がある場合もバックグラウンドで実行する必要がある」とのことでした。通常、サーバーには GUI が統合されていないことに注意してください。それらは通常、バックグラウンドで静かに、目に見えないように実行されるように設計されています。サーバーのステータスを構成または確認するためのグラフィカル インターフェイスを持つことは珍しくありませんが、従来はサーバーに接続してステータス情報を取得し、構成コマンドを送信するだけの、別のスタンドアロン アプリケーション (一種のクライアント) として実装されていました。サーバーが実行されている間ずっと GUI を実行しているわけではないので、追加のオーバーヘッドでサーバーに負担をかけたくありません。

クライアントに関する限り、GUI は通常、コールバックを使用して実装されます。UI ウィジェットが作成されると、ウィジェットがクリック、変更、またはその他の操作が行われるたびに呼び出される関数へのポインターが与えられます。そのコールバック関数が単に別の UI ウィジェットを更新して戻る場合もあれば、より複雑なことを行うために新しいスレッドを生成する必要がある場合もあります。繰り返しますが、これは、GUI とアプリケーションが何をしようとしているのかに大きく依存します。

于 2012-04-25T16:29:10.200 に答える