2016-09-18 101 views
0

我必須在循環中每秒執行一次命令IN PERL。我使用的是劃時代的時間,試圖下面的示例代碼,但它不工作,因爲它打印時間可持續:PERL中循環期間每1秒執行一次命令

#!/usr/bin/perl  
my $checktime = time() + 1; 
while(1) { 
    if ($checktime => time()) 
    { 
     print "This should be print each second..." . "\n"; 
     $checktime = time() + 1; 
    } 
    # DO SOMETHING ELSE 
} 

我不能使用睡眠或因循環期間凍結命令我一定要執行其他命令,而不中斷執行。 你能幫我嗎?

謝謝 盧卡斯

+0

做什麼其他的命令,你必須同時執行?你是否必須從相同的過程執行它們? – redneb

+0

不確定你想用這個條件做什麼,但是如果你只是需要它'每秒打印',可以考慮使用'sleep(1)'。你必須'使用Time :: HiRes' – yonyon100

+2

如果你從同一個過程中完成多項任務,你應該考慮使用一些事件循環。 – redneb

回答

5

if條件是假的,=>不是「大於或等於」運算符,比較的時間顛倒,

my $actiontime = time(); 
while (1) { 
    if (time() >= $actiontime) 
    { 
     $actiontime += 1; 
     print "This should print each second...\n"; 
    } 
    # DO SOMETHING ELSE 
} 
+0

'DOOMETHING ELSE'需要幾秒鐘,'$ actiontime + = 1'應該是'$ actiontime = time + 1'。就目前而言,這會導致一系列的輸出以獲得'$ actiontime'來趕上當前時間。 – Borodin

+0

$動作時間增量是有意爲了避免時間漂移。兩種方法都是「錯誤的」,但方式不同;它很大程度上取決於OP的期望。 –

+0

謝謝,這個作品很完美,至少會每秒輸出一次。很難解釋「DO SOMETHING ELSE」做什麼,因爲在循環過程中存在複雜的長碼。但是,用幾句話來說。我連接到服務器,打開一個包含數據的文件,然後遍歷該文件以讀取數據。我的目標很簡單,就是統計每秒循環發送多少個數據。我注意到它每秒發送大約100個數據包,但我需要存儲這些數據! –