4

PropertyNotified シグナル中にハンドラーから org.freedesktop.Hal.Device で GetProperty を呼び出しています。追加または変更されたプロパティに対してのみ GetProperty を呼び出しています。

プロパティの追加中に GetProperty を呼び出すと、org.freedesktop.Hal.NoSuchProperty 例外が発生します。また、変更中に古い値が取得されることも心配しています。

いつ GetProperty を呼び出す必要がありますか? どのような競合状態が関係していますか?

4

1 に答える 1

1

DeviceExistsメソッドはどうですか(ここのように):

    if device.PropertyExists('info.product'):
        return device.GetProperty('info.product')
    return "unknown"

およびPropertyModified信号 (実世界の例):

 #
 # _CBHalDeviceConnected
 #
 # INTERNAL
 #
 # Callback triggered when a device is connected through Hal.
 #

 def _CBHalDeviceConnected(self, obj_path): 
...
 self.device.connect_to_signal("PropertyModified", 
   self._CBHalDeviceAuthStateChanged) 
...

#
# _CBHalDeviceAuthStateChanged
#
# INTERNAL
#
# Callback triggered when a Hal device property is changed, 
# for checking authorization state changes
#

def _CBHalDeviceAuthStateChanged(self,num_changes,properties):
 for property in properties:
 property_name, added, removed = property
 if property_name == "pda.pocketpc.password":
 self.logger.info("_CBHalDeviceAuthStateChanged: 
     device authorization state changed: reauthorizing")
 self._ProcessAuth() 

HAL 0.5.10 仕様
D-Bus 仕様
D-Bus チュートリアル

于 2009-03-03T10:54:31.747 に答える