[Perl]: не ссылка на CODE ... мой первый скрипт - PullRequest
0 голосов
/ 04 апреля 2011

я получаю следующую ошибку, когда пытаюсь запустить свой 1-й скрипт Perl:

[id=0 @ 0] : IP address "3.3.3.3" corresponds to device "core". 
Thread 1 terminated abnormally: Not a CODE reference at ./dev_ithread.pl line 23.
[id=0 @ 1] : IP address "5.5.5.5" corresponds to device "border". 
Thread 2 terminated abnormally: Not a CODE reference at ./dev_ithread.pl line 23.

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

Ответы [ 2 ]

4 голосов
/ 04 апреля 2011

\&thread_job($key, $device_ip{$key}, $index) не делает то, что вы думаете, он делает: он сразу запускает thread_job(...), а затем выдает ссылку на свой результат.threads->new затем пытается выполнить эту ссылку в новом потоке, что не работает, потому что это не ссылка на sub.

Возможно, вы вместо этого хотите сказать sub { thread_job($key, $device_ip{$key}, $index) }.(Или версия @ musiKk.)

4 голосов
/ 04 апреля 2011

Первый аргумент threads->new() должен быть ссылкой на код или именем функции.Вы выполняете функцию и пытаетесь получить ссылку на код результата (который, скорее всего, является истинным значением, поскольку именно это возвращает print), отсюда и ошибка.Я думаю, ваш звонок должен быть таким:

threads->new(\&thread_job, $key, $device_ip{$key}, $index)->join
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...