清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
#!/usr/bin/perl
use threads;
use threads::shared;
use Thread;
use Thread::Queue;
use POSIX;
my %chat_ans_map = (
"Hello" =>"Hithere",
"Who" =>"I'm a thread.My name is ",
"old" =>"Not as old as yesterday!",
"slaved" =>"If you compete with a slave, you'll become one",
"lonely" =>"Lonely is my middle name and I can't shake it off!",
"sorry" =>"That's alright! You are a thread too, aren't you? I'm not alone!",
"hehe" =>"hehe :D",
"Where" =>"A place set with oak and cedar tree, somewhere between nowhere and goodbye",
"Byebye" =>"Take care!"
);
my %chat_map = (
"0" =>"Hello",
"1" =>"Who is this speaking ?",
"2" =>"Wow.Same here! How old are you ?",
"3" =>"How do you like being slaved to do things incessantly?",
"4" =>"I'm sorry to hear that!",
"5" =>"Indeed! Are you feeling lonely out there running 24/7?",
"6" =>"hehe",
"7" =>"Where are you running now?",
"8" =>"Hmmm...Byebye",
"9" =>"END"
);
my $chat_ask_queue = Thread::Queue->new();
my $chat_ask = threads->new(\&chat_ask,"Thread_A",Thread->self());
my $chat_ans = threads->new(\&chat_ans,"Thread_B",Thread->self());
$chat_ask->join();
$chat_ans->join();
sub chat_ask {
my ($name,$selfid) = @_;
my $index = 0;
while (1) {
sleep 5;
last if ($chat_map{$index} =~/END/);
my $content = getTime()." ".$name.": ".$chat_map{$index};
$chat_ask_queue->enqueue($content);
$index++;
print "$content\n";
}
}
sub chat_ans {
my ($name,$selfid) = @_;
while (my $feedback = $chat_ask_queue->dequeue()){
sleep 2;
my $answer = match_ans($feedback);
my $content;
$content = getTime()." ".$name.": ".$answer;
$content = $content.$selfid if ($feedback =~/Who/);
print "$content\n";
last if ($feedback =~/Byebye/);
}
}
sub match_ans {
my $incoming_msg = $_[0];
foreach my $tmp (keys %chat_ans_map) {
if($incoming_msg =~/$tmp/) {
return $chat_ans_map{$tmp};
}
}
return $chat_ans_map{(keys %chat_ans_map)[-1]};
}
=cut
sub exit_all {
my @thread_list = threads->list();
foreach my $tmp (@thread_list) {
$tmp->join();
}
}
=cut
sub getTime {
my $timestamp=time;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($timestamp);
my $m = $mon +1;
my $ret = $m."-".$mday." ".$hour.":".$min.":".$sec;
return $ret;
}