2009-07-30 26 views
1

私は単純なpyS60アプリケーションをプログラミングしています。実際にはPythonで何もやっていないし、複数のスレッドを使っています。 アプリケーションを開いたままにするために、アプリケーション本体が初期化された後にe32.Ao_lockをwait()に設定し、exit_key_handlerのロックを通知します。複数のao.lockの回避方法を回避するには?

プログラムが行う可能性のあるタスクの1つは、サードパーティのアプリケーション、UpCodeを開くことです。これはバーコードをスキャンし、バーコード文字列をクリップボードにコピーします。 UpCodeを閉じると、アプリケーションはクリップボードからの入力を再開して貼り付ける必要があります。 これはAo.lockを使用して実現できますが、私はすでにこのインスタンスを呼び出しました。理想的には、クリップボードに何かが貼り付けられたことに気づいた後で、私のアプリケーションはフォーカスを取り戻すでしょう。 スリープ機能またはタイマー機能のいずれかで必要なものを達成できますか?

あなたは完全なスクリプトhereを見つけることができる、と私は、以下の必要な部分にそれを省略しました:任意およびすべてのヘルプは感謝

lock=e32.Ao_lock() 

# Quit the script 
def quit(): 
    lock.signal() 

# Callback function will be called when the requested service is complete. 
def launch_app_callback(trans_id, event_id, input_params): 
    if trans_id != appmanager_id and event_id != scriptext.EventCompleted: 
     print "Error in servicing the request" 
     print "Error code is: " + str(input_params["ReturnValue"]["ErrorCode"]) 
     if "ErrorMessage" in input_params["ReturnValue"]: 
      print "Error message is: " + input_params["ReturnValue"]["ErrorMessage"] 
    else: 
     print "\nWaiting for UpCode to close" 
    #lock.signal() 

# launch UpCode to scan barcode and get barcode from clipboard 
def scan_barcode(): 
    msg('Launching UpCode to scan barcode.\nPlease exit UpCode after the barcode has been copied to the clipboard') 
    # Load appmanage service 
    appmanager_handle = scriptext.load('Service.AppManager', 'IAppManager') 
    # Make a request to query the required information in asynchronous mode 
    appmanager_id = appmanager_handle.call('LaunchApp', {'ApplicationID': u's60uid://0x2000c83e'}, callback=launch_app_callback) 
    #lock.wait() 
    #print "Request complete!" 
    barcode = clipboard.Get() 
    return barcode 

# handle the selection made from the main body listbox 
def handle_selection(): 
    if (lb.current() == 0): 
     barcode = scan_barcode() 
    elif (lb.current() ==1): 
     barcode = clipboard.Get() 
    elif (lb.current() ==2): 
     barcode = input_barcode() 

    found = False 
    if is_barcode(barcode): 
     found, mbid, album, artist = identify_release(barcode) 
    else: 
     msg('Valid barcode not found. Please try again/ another method/ another CD') 
     return 

    if found: 
     go = appuifw.query(unicode('Found: ' + artist + ' - ' + album + '\nScrobble it?'), 'query') 
     if (go == 1): 
      now = datetime.datetime.utcnow() 
      scrobble_tracks(mbid, album, artist, now) 
     else: 
      appuifw.note(u'Scrobbling cancelled', 'info') 
    else: 
     appuifw.note(u'No match found for this barcode.', 'info') 

# Set the application body up 
appuifw.app.exit_key_handler = quit 
appuifw.app.title = u"ScanScrobbler" 
entries = [(u"Scan a barcode", u"Opens UpCode for scanning"), 
      (u"Submit barcode from clipboard", u"If you've already copied a barcode there"), 
      (u"Enter barcode by hand", u"Using numeric keypad") 
      ] 

lb = appuifw.Listbox(entries, handle_selection) 
appuifw.app.body = lb 

lock.wait() 

答えて

0

別の第2のロックを定義し、一度に1つだけ待っていることを確認してこの問題を解決しました。何の問題もなく動作するようです。現在のコードを見つけることができますhosted on google code

関連する問題