1

last_coordinatesリストを使用して現在のリストと比較できるようにするには、このコードをどのように変更すればよいでしょうか。これにより、これら 2 つのリストの値に違いがある場合coordinatesなどにメソッドを呼び出すことができます。activate()

HOST = '59.191.193.59'
PORT = 5555

coordinates = []

def connect():   
    globals()['client_socket'] = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((HOST,PORT))

def update_coordinates():
    screen_width = 0
    screen_height = 0
    while True:
        try:
            client_socket.send("loc\n")
            data = client_socket.recv(8192)
        except:
            connect();
            continue;

        globals()['coordinates'] = data.split()

        if(not(coordinates[-1] == "eom" and coordinates[0] == "start")):
            continue

        if (screen_width != int(coordinates[2])):
        screen_width = int(coordinates[2])
                screen_height = int(coordinates[3])
        return

Thread(target=update_coordinates).start()
connect()
update_coordinates()
while True:
    #compare new and previous coordinates then activate method?
    activate()
4

1 に答える 1

0

モジュールスコープで last_coordinates を初期化する必要があります

last_coordinates = ['start', 0, 0]

後でデータを受け取ったら、次のコードのようなものを追加します。

globals()['coordinates'] = data.split()
if last_coordinates[0] != coordinates[0] or \
   last_coordinates[1] != coordinates[1] or \
   last_coordinates[2] != coordinates[2]:
   # Do something useful here

# this line copies your coordinates into last_coordinates
last_coordinates = coordinates[:]

他の人もコメントで指摘しているように、コードには他にも問題があります。たとえば、上記のフラグメントの最初の行は、次のように書き換えたほうがよいでしょう。

 global coordinates
 coordinates = data.split()

ただし、スレッド化にまだ問題がある可能性があります。

于 2012-10-05T10:38:25.413 に答える