4

私がしたいこと:

  1. スレッドでTCPServerを実行する
  2. 「ソケットから受信」データを取得
  3. プロットを更新してデータを表示します

私が成功したこと:

  1. wxPythonのフレームにはボタンがあり、
  2. ボタンをクリックしてソケットを開始します
  3. ソケットからデータを受信する

問題:

  1. TCPServerスレッドからプロット関数を呼び出そうとすると、このエラーが発生します

    "PyAssertionError: C++ assertion "wxThread::IsMain()" failed at ..\..\src\common\timercmn.cpp(66)
    in wxTimerBase::Start(): timer can only be started from the main thread "
    

コード:

  1. メイン、スレッドを開始します

    def start_socket(self):
    
        HOST = ''
        PORT_A = 6340
        self.server_A = ThreadedTCPServer((HOST, PORT_A), ThreadedTCPRequestHandler)
        self.server_temp = self.server_A
        self.server_A_thread = threading.Thread(target=self.server_A.serve_forever)
        self.server_A_thread.setDaemon(True)
        self.server_A_thread.start()
    
  2. 私がプロットしようとしているスレッド:

    class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
        def handle(self):
            self.Main =  Main(None, -1, '')
            self.data = self.request.recv(1024).strip()
            print "%s wrote: " % self.client_address[0]
            print self.data
            plt.ion()    
            self.fig = plt.figure(1)
            print self.image_scale
            ax = self.fig.add_subplot(111)
            self.image_scale = ([1,2], [ 4,10 ] )
            cax = plt.imshow(self.image_scale, cmap='Greys', interpolation='nearest' )
            draw()
    

デバッグでは、エラーは次の行から発生します。

self.fig = plt.figure(1)

Error:  "timer can only be started from the main thread"

確かではありませんが、wx.Frameのメイン関数でプロットを作成する必要があると思います。通常のプログラムを実行し続け、別のスレッドでリアルタイムにプロットできるソリューションはありますか?特に、複数のTCPServerスレッドを作成するつもりです。

よろしくお願いします。よろしくお願いします。

4

1 に答える 1

-3

とにかくありがとう、私はそれを解決し、今は別のスレッドからタイマーを実行しています、

言語におけるその制限、回避策でそれは機能します

于 2013-01-30T16:55:26.120 に答える