• ベストアンサー

Perlでイベント処理?

ようやくPerlに慣れてきて、ふと思ったのですが VBではイベントというものがあり、Perl Tkでもキーボード・マウスのイベントの処理ができる みたいですが、クライアントでソケット受信した場合、いつ受信するかわかりませんので ループしていれば良いのですが、ループしている間は、他の実行が何も出来ず効率も悪いなと 思うようになりました。 WindowsのPerl5.6を使っているのですが、ソケット等、イベント処理できる方法はあるのでしょうか?

  • Perl
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

PerlでWindows風にsoketを扱う方法は知りませんが、接続待ちをするのであれば accept をするだけですよ。acceptの中で外部からの接続があるまで停止します(OSは接続があるまでそのプロセスをsleep状態にしている筈です)。その最中に他のことをしたいなら fork してやれば良いんじゃないでしょうか。但しWindows用のPerlのforkがどう動くのか私は知りません。(UNIXなら子プロセスに分離します)

関連するQ&A

  • イベントの取りこぼしについて

    教えて下さい。 VBで構築したアプリケーションにおいて、無限ループ内で処理を判断し、実行するようなプログラム構築にしています。この無限ループ内に「DoEvents」をセットしています。これによりOSに溜まっている、各イベントを処理していると思うのですが、処理するイベントに取りこぼしは発生しないのでしょうか? 現在、A/Dボードを実装しており、2ms周期でVBのイベントが発生するようなソフトになっています。「DoEvents」実行時に、OS側が処理に要する時間は、キューに溜まっているイベント数×1回のイベント処理時間で単純に導けるものでしょうか? また、CPUのスペックを2倍にすると、単純に処理時間は半分と計算できるものでしょうか?

  • VC++ Socket受信中のイベント取得方法について

    <現状> 無限ループ内で、以下の処理を行っているのですが、 その間、ウィンドウメッセージを受付けなく、 アプリケー ションの終了もできない状態です。   ソケットを生成(socket)    ↓   ソケットをサーバに接続(connect)    ↓   データ受信(recv)    ↓   取得したデータをファイルへ出力 <質問> ソケット処理中、ウィンドウズイベントを取得できる方法ってありますでしょうか?

  • C# イベント処理について

    GUIなどの処理はイベントというのを使っていますが、イベントの実際の内部処理は一体どんな仕組みで動いているのでしょうか。  単純に無限ループをして状態が変化しているかチェックしているのでしょうか。 例えばボタンが2つあり、マウスが上に来たらボタンの色を反転させるイベントは、マウスと2つのボタンの当たり判定を監視し、繰り返す。という感じなのでしょうか。 (ということはボタンの数やボタン自体のイベントが増えれば負荷も増えてしまう?)

  • perlの処理を遅くしたい

    CGI初心者です。わかる方教えてください。 少々古いですがactiveperl apache1.3.12を利用してperlプログラムを自宅のみで使うCGIプログラムをWINDOWS上で起動しています。 処理が長くまた同時に複数の処理をperlで処理します。ブラウザ送信ボタンよりCGIを実行してperl.exeを合計5つぐらい同時に起動します。 タスクマネージャーのプロセスの優先度の設定は実行当初「普通」になっていますが,これを実行当初から「低」にしたいと思っていますが やり方がよくわかりません。CGIの書き方,apacheの設定,ショートカットの書き方でできるんではないかと思っていますが,ご存じの方教えてください。OSはWINXPです。宜しくお願いします。

  • 各イベントの共通の前処理は存在する?(VB.NET)

    VS.NET2003,VBについての質問です。 ASP.NETでは、WebControlsのイベントを発生させるたびに(ボタンを押したり、テキスト変更したりなど)、 Page_Load>WebControlsイベントの順番で、イベントが発生することを確認しました。 Windowsアプリケーションにおいて、上記のPage_Loadに該当するイベントは存在するでしょうか。 つまり、Windows.Formsコントロールのイベント処理が発生するたびに、その前処理として実行される、上記のPage_Loadのような共通のイベントは存在するでしょうか。 以上、どうぞよろしくお願い致します。

  • コンボボックスのイベント 更新後処理をしたい

    VB.NETのテキストボックス、コンボボックスで アクセスのAfterUpdate(更新後処理)と同じ動きをするイベントはどれですか? 「TextChanged」を使うと 例えばテキストボックスに「あいう」の「う」を打ち終わってから実行したいのに 「あ」を入力するだけで実行されてしまいます。 「あいう」と入力し終わってから実行するイベントはどれでしょうか? よろしくお願い致します。

  • クラス内に自作のイベントを定義したい VB2005

    VB2005を使っています。 クラス内に自作のイベントを定義したいのですがどうすればよいのでしょうか? 非同期のソケットから帰ってきた場合に発生させるイベントです。 System.Net.Sockets.TcpClient System.Net.Sockets.NetworkStream 以下のようにループでなくイベントで処理させたいです。 Do If .DataAvailable Then             ... End If My.Application.DoEvents() Loop

  • 無限ループ中におけるマウスイベント処理について

    import java.awt.*; import java.awt.event.*; //他のインポートは省略。 public class Test extends Frame {  public static void main(String[] args) {   new Test();  }  public Test() {   //フレームの基本設定は省略。   enableEvents(AWTEvent.MOUSE_EVENT_MASK);   show();   mainLoop();  }  private void mainLoop() {   while(true) {    //処理は省略。   }  }  public void processMouseEvent(MouseEvent e) {   //処理は省略。  }  //他のメソッドは省略。 } こんな感じのプログラムを作ったのですが、mainLoop メソッドの無限ループにはまって何もできなくなるはずが、 なぜか普通にマウスイベント処理ができたので不思議に思っております。 VB などで同じようなプログラムを作るときは無限ループの最後に DoEvents でイベント処理をさせております。 言語仕様なのか自分の使ってる PC や OS など環境のせいなのが気になっております。 Java 言語に詳しい方、もし何かご存知でしたら教えて下さい。 (なお、省略した部分は普通の計算処理とかなので影響はないと思われます。)

    • ベストアンサー
    • Java
  • 実行させた処理の終了を待ちたいのに・・・

    VB.NETで、とても困っています。 現在実行中のアプリから別のアプリをCreateObjectで起動して、その起動したアプリに対してイベントを行うというプログラムを作っています。 処理手順としては、 (1)アプリを実行 (2)実行したアプリ内のあるプロパティをちょっと変更  (表示名称を変えるとか、そのくらいの処理です) これだけのことなのですが、(2)の実行がうまく出来ません。 ところが、(1)と(2)の間に、(1)のアプリのプロパティを取得してメッセージボックスを表示、などといった、処理を中断させる処理を挿入すると、思ったとおりのことが出来るようになります。 つまり、(1)の処理が完全に終わっていないうちに(2)のイベントを発生させようとしているようです。 こういう場合、VB6.0のときはDoEventsで解決したのですが、VB.NETではなぜか解決できません。 何か他に方法はないものでしょうか? メッセージボックスを挿入する手段は使えませんので、何とかしなくてはいけないのですが。 よろしくお願いします。

  • Perlの処理待ちコマンド

    Perlをインストールして勉強し始めて数十分のものです (まだ一時間経っていません)。いま、超簡単なサンプルで勉強中です。 環境はWinにActivePerlをインストールして、 コマンドプロンプトを立ち上げ「Perl ファイル名」とし実行しています。 これをファイルのダブルクリックで実行できるようにしたいと思っています。 というか実際には実行だけはできるのですが、一瞬で終わってしまい 結果の確認が出来ません。これを処理待ちさせて確認できるように したいのですが、その方法が分かりません。 DOSバッチのpauseとかに相当するものです。 今は分からないので、無限ループで代用していますがショボすぎます。 …と書いているうちに標準入力待ちをするコマンドが分かったので それを使うようにしました。少しはましになりましたが、 より正統な方法を知りたいです。 あと、一定時間待つコマンドもあとで使うようになるかも しれないのでこれもあわせて教えてください。 ・普通の処理待ちコマンド ・一定時間待つコマンド これを教えてください。よろしくお願いします。 $xx = 7; print "答は$xxです\n"; print '答は$xxです\n'; print "\n\n"; print "何か押してください"; $aa = <STDIN>;

    • ベストアンサー
    • Perl