注意ACE_Proactor的cancel_timer方法
int ACE_Proactor::cancel_timer( longtimer_id, const void **act = 0,int dont_call_handle_close = 1 )通过跟踪发现:dont_call_handle_close 这个参数无论怎么设置,都没用。原本以为是能自动调用处理器的handle_close方法,自动删除自己的,结果发现根本不是,理解错误。需要自己delete this.
导致软件产生内存泄漏。其实通过代码也可以看见,ACE_Proactor需要使用的schedule_timer (ACE_Handler&handler ...) 中的ACE_Handler,没有handle_close虚方法,所以也不会被调用。 If you using ref_count, handlers will be safely delete by reactor when count=0. You don't need delete this any more.
页:
[1]