Невозможно изменить значение, возвращаемое time.time() в коде Python, встроенном в C++

Я сталкиваюсь с очень странной проблемой.

Следующий код:

import time
target_time = time.time() + 30.0

не работает в коде Python, вызываемом из C++ (встраивание)!

target_time имеет то же значение, что и time.time(), и любая попытка изменить его оставляет значение неизменным в консоли pdb...

http://dl.dropbox.com/u/3545118/time_bug.png

Это происходит после того, как я вызвал root.initialise() в графическом движке Ogre3D, но только при использовании Direct3D, а не при использовании OpenGL.

Так что это может быть связано с Direct3D...

1 ответ

Решение

Нашел ответ в этой теме: http://www.ogre3d.org/forums/viewtopic.php?f=1&t=55013&p=373940&hilit=D3DCREATE_FPU_PRESERVE

http://msdn.microsoft.com/en-us/library/ee416457%28VS.85%29.aspx

D3DCREATE_FPU_PRESERVE Установите точность для вычислений с плавающей запятой Direct3D равной точности, используемой вызывающим потоком. Если вы не укажете этот флаг, по умолчанию Direct3D будет использовать режим округления до ближайшей одинарной точности по двум причинам:

  • Режим двойной точности снизит производительность Direct3D.
  • Части Direct3D предполагают, что исключения модуля с плавающей точкой замаскированы; снятие маски с этих исключений может привести к неопределенному поведению.
Другие вопросы по тегам