1

無限ループを実行する pygtk でアプリケーションを作成しています。ループは、witk gtk.main() を妨害するため、アプリケーションは応答しません。実際、私はクライアント接続を継続的にリッスンするサーバータイプのアプリケーションを構築しています.Plzzzヘルプ....私はこれの初心者です。

これは、私が最初にやろうとしていたことのサンプルです。(コードが必要な人向け)

while 1:
  s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  s.bind(('',2727))
  s.listen(1)
  c,d=s.accept()
  print d
  x=c.recv(1024)

最後に gtk.main() を次のものに置き換えることを考えました:

while 1:
  s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  s.bind(('',2727))
  s.listen(1)
  s.accept()
  gtk.main_iteration_do(False)

それは機能しますが、s.accept() は以前と同じ問題を引き起こします....誰か助けてもらえますか

4

3 に答える 3

2

次の方法で、保留中の gtk イベントをアプリケーションに強制的に処理させることができます。

while True:
    #your code 

    while gtk.events_pending():
        gtk.main_iteration()

ただし、「コード」の実行に時間がかかる場合は、バックグラウンド プロセスでの実装を検討する必要があります。

于 2012-04-08T18:03:29.527 に答える
1

2 番目のスレッド (docs.python.org/library/threading.html) を使用できます。(pygtk.org/docs/pygtk/… を使用して) ループに gtk を組み込む方法もありますが、ネットワーキングについて言及しているので、ネットワークで何かが発生するまでループをブロックするブロッキング呼び出しを使用していると思います。ただし、実際のコードを示すまでは推測することしかできません。

于 2012-04-08T18:06:29.330 に答える