Как я могу узнать, почему мое действие перетаскивания на мгновение зависает в Perl / Tk? - PullRequest
0 голосов
/ 20 июля 2009

Я вижу случайные (один раз из пяти), кратковременные (5-10 секунд) "зависания" при перетаскивании - возможно, как часть обратного вызова -startcommand. Это никогда не происходит при первом перетаскивании.

Обратный вызов достаточно прост; он просто устанавливает текст перетаскиваемого курсора на значение, которое перетаскивается:

sub DragStart {
  my( $token ) = @_;

  my $w = $token->parent;
  my $e = $w->XEvent;

  my $idx = $w->nearest( $e->y );
  if( defined $idx ) {
    $token->configure( -text -> $w->get( $idx );
    my( $X, $Y ) = ( $e->x, $e->y );
    $token->MoveToplevelWindow( $X, $Y );
    $token->raise;
    $token->deiconify;
    $token->FindSite( $X, $Y, $e );
  }
}

Я не могу не задаться вопросом, не связана ли проблема с моим кодом, поэтому я хотел бы найти способ определить, какая подпрограмма вызывается в данный момент, когда происходит замораживание.

Есть ли такой инструмент? Что-то, что показывает стек вызовов в реальном времени, сделает это, если оно есть.

1 Ответ

2 голосов
/ 20 июля 2009

Вы должны запустить свое приложение через один из отладчиков Perl.

Поскольку вы человек TK, вы можете попробовать Devel :: ptkdb или вы просто выберете стандартный Perl-отладчик .

...