Thank you, eventually i managed to set up the 'serial' thread and i can share its '@values' with Tk but the problem is that it's still in an infinite while loop.

$mw->repeat(1000,sub{ print "@values"."\n"; });

But is it possible to run a thread when i want it to run not just in a while(1) loop all the time?

I tried to pass another variable to my serial thread which determines the running state

share @values; share $opened_port;

Where $opened_port is set when i click on the Open button

sub opening_port { require Win32::SerialPort; $serial=Win32::SerialPort->new("COM6"); $serial->baudrate(9600) || die "Bad baudrate"; $serial->parity('none') || die "Bad parity"; $serial->databits(8) || die "Bad databits"; $serial->stopbits(1) || die "Bad stopbits"; #$serial->buffers(4096,4096) || die "Buffer error"; $serial->handshake("none") || die "Bad handshake method"; $serial->write_settings; while(1) { print $opened_port; if($opened_port) { my @array; my $string; my $i=0; do { $string=$serial->read(1); #Beolvass egy karakter +et a sorosportról if((ord($string) >= 0x09 && ord($string) <=0x7A) || $string eq '\t' + || $string eq '\n') #megvizsgálja, hogy a beolvasott karakter megfel +el-e az ASCII kritériumoknak { $array[$i]=$string; #elmenti a tömbbe i.-ik helyére az adott karakt +ert $i++; #növeli az index értékét } }while($string ne "\n" ); #addig fut a program amíg nem \n a beolva +sott karakter $i=0; $string = join('' , @array ) ; #ezután egy skalárba összef&#369;z +i a tömb elemeit, egymás után - nincs szeparátor chomp($string); # leszedi a \r és \n karaktereket a string végér&#337; +l @values = split('\t',$string); #majd felbontja a skalárt a tabul +árotok mentén # az 1-es index tartalmazza a a h&#337;mérsékleti adatokat, a 3-as ind +ex az id&#337;t } } }

Of course i get an error which says that $opened_port is uninitialized, so i guess that shareing variable is a child to parent thing and it won't work in the other way. But what could be the proper way to read the serial port on button press and close it on another button event?


In reply to Re: Perl/Tk vs Win32::SerialPort by Shaoboy
in thread Perl/Tk vs Win32::SerialPort by Shaoboy

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.