Невозможно изменить значение, возвращаемое 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 предполагают, что исключения модуля с плавающей точкой замаскированы; снятие маски с этих исключений может привести к неопределенному поведению.