2012-04-25 9 views
2

これはGUIに関する一般的な質問です。私はGUIを使ったプログラムを書いたことは一度もありませんでしたが、今は大学でやる必要があります。私は、Cでの最良のソリューションプログラミングがGTK +であることを発見しました。GTK +でのGUI、最初のステップ

私は多くの例を参照してください、私はまだ一つのことを理解することはできません。私のプログラムはサーバー/クライアントアプリケーションなので、小さなGUIがある場合でもバックグラウンドで実行する必要があります。どのように実現できますか?私はgtk_main()ループを使用しなければならない人を "始める"ことがわかります。アプリケーションはこのループの中で常にブロックします。 fork()を使って他のタスクを同時に行うべきでしょうか?

ご迷惑をおかけして申し訳ありません。


それは英語であり、イタリア語でそれを説明するのは難しい最悪:)

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

GUIは面白いかもしれ実装別々の「クライアント」を有するという考え。

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

+1

「私のプログラムはサーバー/クライアントアプリケーションです」とはどういう意味ですか?それはサーバー(別のプログラム)に接続するクライアントですか?同じプログラムが実行される2つのインスタンスがあります.1つはクライアント、もう1つはサーバーです。 – ArjunShankar

+0

次へ:「他のタスクを同時に行うにはfork()を使うべきですか?」 GUIを実行する以外に、他に何をしたいのですか? – ArjunShankar

+0

次へ:「小さなGUIがある場合でもバックグラウンドで実行する必要があります」:これはどういう意味ですか?私は不明です。 – ArjunShankar

答えて

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(読み取りのようなものを(ブロッキング行う必要がある場合)/ fread()呼び出し)、スレッドを生成し、そのスレッドにアイドルハンドラを追加してGUIループに戻す必要があります。これは、メインループやスレッドを初めて使用しているかどうかを理解するのは難しいので、GIOを使用することは優れています。

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

+0

このメソッドを使用すると、すでに書いた関数を使用することができますか、それらを書き直す必要がありますか? – phcaze

+0

本当にあなたが書いたものに依存します;-) –

0

あなたのプログラムが具体的に行っていることについていくつかの詳細を教えてもらえますか?あなたの現在の説明は、あなたが求めていることを本当に理解するのは難しいほど曖昧です。ここで

は、元の質問の私の解釈に基づいていくつかの一般的なアドバイスです。

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

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

+0

GTKのウェブサイトには、あなたに役立つチュートリアルがいくつかあります:http://developer.gnome.org/gnome-devel-demos/unstable/ – bta

関連する問題