跳转至

IDL 8.3 新特性:!DEBUG_PROCESS_EVENTS 系统变量

原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/new-to-idl-83-debug-process-events-system-variable

22079 给本文评分:

4.0

IDL 8.3 新特性:!DEBUG_PROCESS_EVENTS 系统变量

匿名 2014年1月16日 星期四

在 IDL 8.3 中,你可以使用 !DEBUG_PROCESS_EVENTS 系统变量来控制 IDL 是否在断点处生成窗口小部件事件。默认情况下,此变量设置为 1,这会导致 IDL 即使在遇到 STOP 语句或工作台的断点时也发送窗口小部件事件。你可以通过将 !DEBUG_PROCESS_EVENTS 设置为 0 来关闭这些事件。此更改是在 IDL 8.3 中引入的,目的是让用户在调试程序时能够与 IDL 8 图形系统(又称新图形系统)进行交互。例如,如果你运行下面的程序(test_process_events_default),当 IDL 在 STOP 语句处停止时,你将能够与曲面进行交互(旋转、缩放等)。

pro test_process_events_default   !debug_process_events=1 ; 默认设置   a=findgen(100)   ng_sur=surface(hanning(200,200))   stop ; 断点 end

然而,如果你运行下面的程序(test_process_events_zero),当 IDL 遇到断点时,你将无法与曲面进行交互:

pro test_process_events_zero   !debug_process_events=0   a=findgen(100)   ng_sur=surface(hanning(200,200))   stop ; 断点 end

在 IDL 的早期版本中,当 IDL 遇到断点时,窗口小部件事件会被停止。在 IDL 8.3 中,由于默认行为不同,你可能会遇到意想不到的窗口小部件事件。这种情况的一个例子是调试一个带有窗口小部件计时器事件的应用程序。例如,如果你在 IDL 8.2 中运行下面所示的应用程序(break_timer_example),执行将在 STOP 调用处停止,并且不会生成任何窗口小部件事件。如果你在 IDL 8.3 中运行此代码并采用默认设置(!DEBUG_PROCESS_EVENTS=1),那么即使 IDL 遇到 STOP 调用,计时器事件也将继续生成。

pro break_timer_example_event, ev     widget_control, ev.id,get_uvalue=uval   print, 'timer fired'   widget_control, ev.top,timer=2   stop end

pro break_timer_example   base = widget_base(/column, uvalue='base')   widget_control, base, /realize   xmanager, 'break_timer_example', base, /no_block   widget_control, base, timer=2 end

希望这些信息能对你有所帮助。感谢阅读!

研究与教育及企业:找到正确的融合配方 利用LiDAR确定理想的太阳能电池板放置位置