5

X秒ごとにタスクを実行するだけのデーモンをValaで作成したいと思います。私はどちらが最善の方法であるか疑問に思いました:

  1. Thread.usleep()またはPosix.sleep()
  2. GLib.MainLoop + GLib.Timeout
  3. 他の?

何もしていないのに、あまり多くのリソースを食べてほしくない。

4

2 に答える 2

7

システム コールでスリープ状態に時間を費やしても、パフォーマンスの観点からは大きな違いはありません。とはいえ、次の 2 つの理由から、MainLoop アプローチを使用することはおそらく理にかなっています。

  1. SIGTERM が与えられたときにデーモンが即座に終了できるように、シグナルハンドラをセットアップする必要があります。を介しquitてバインドしてメイン ループを呼び出すと、スリープが成功したかどうかを確認するよりも、コードが読みやすくなります。SIGTERMPosix.signal

  2. 複雑さを加えることにした場合でも、MainLoop を使用するとより簡単になります。

于 2012-09-24T13:28:17.193 に答える
0

GLib.Timeout.add_seconds次の方法を使用できます。

Timeout.add_seconds (5000, () => {
  /* Do what you want here */

  // Continue this "loop" every 5000 ms
  return Source.CONTINUE;

  // Or remove it
  return Source.REMOVE;
}, Priority.LOW);

: バックグラウンドで実行され、他のタスクに優先順位を与える必要があるため、タイムアウトは Priority.LOW として設定されます。

于 2016-03-21T19:26:03.967 に答える