如何在Perl Win32 :: GUI程序中连续读取串口?

1 perl user-interface winapi serial-port

我想在Windows XP下使用Win32 :: SerialPort模块从COM端口读取文本字符串.

串口附有刻度,连续发送当前测量的重量.由于我也在使用Win32 :: GUI,我需要一种方法来读取非阻塞.最好的方法是什么?我应该使用Lookforstreamline?我对文档感到有点困惑.


原始问题文本: Ichmöchtemitdem Modul Win32 :: SerialPort unter Windows Xp von einem COM-Port ein bestimmten Textstring nur einlesen.一个dem SerialPort ist eine Waage angeschlossen,死于永久性的das aktuell gemessene Gewicht ausgibt.Da ich auch Win32 :: GUI verwende darf/sollte das einlesen nicht blockierend sein.Wie stelle ich das am geschicktesten?sollte ich verwenden Lookfor oder精简?Ich blicke bei dem Manual nicht so richtig durch.

Sin*_*nür 6

由于设备通过串口不断发送信息,您可能需要设置一个定时器,并在不阻塞主线程的情况下查看连接中的内容.

首先,我将指向Win32 :: GUI :: Tutorial :: Part4,其中讨论了计时器.

使用运行以下示例perl.exe,而不是wperl.exe因为输出进入控制台:

#!/usr/bin/perl

package My::GUI;

use strict; use warnings;

use Win32::GUI();

sub new { bless {} => shift }

sub initialize { # very quick and dirty example
    my $self = shift;

    $self->{window} = Win32::GUI::Window->new(
        -name => 'Main',
        -title => 'Test',
        -onTerminate => sub { -1 },
        -onTimer => sub { $self->onTimer(@_) },
    );

    $self->{timer} = $self->{window}->AddTimer(Timer => 0);
    return $self;
}

sub run {
    my $self = shift;

    my $window = $self->{window};
    $window->Show;
    $window->SetRedraw(1);
    $self->{timer}->Interval(1000);
    Win32::GUI::Dialog();
}

# poll serial port here, don't block
sub onTimer { warn time - $^T, "\n"; return; }

package main;

use strict; use warnings;

My::GUI->new->initialize->run;
Run Code Online (Sandbox Code Playgroud)

输出:

C:\Temp> gui
1
2
3
4
5
6
Terminating on signal SIGINT(2)

现在,关于Win32 :: SerialPortWin32 :: CommPort之间的选择以及哪些方法取决于连接另一端的规模的规格.