我想一直运行附加到文件的函数,但是我也想添加第二个true,同时每10秒运行x个东西,但是我该如何处理呢?
我尝试做<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select class="custom_select" name="customSelect1" id="customSelect1">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<select class="custom_select" name="customSelect2" id="customSelect2">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
<select class="custom_select" name="customSelect3" id="customSelect3">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
,但是我很幸运。
while($true){while ($true) {
write-host 'do stuff...'
Start-Sleep -Seconds 60
} }
我希望我的第一个while为true时将每个日志永久地附加到文件中,但是我也想在true的同时保持每十秒运行到第二个日志,但是我该怎么做?
答案 0 :(得分:1)
两个操作都有单独的脚本。一个具有无限while循环的循环具有延迟,并将其称为后台作业。
$AppendJob = Start-Job -FilePath c:\Temp\FirstWhile.ps1 -Name AppenJob
$DelayJob = Start-Job -FilePath c:\Temp\SecondWhile.ps1 -Name DelayJob
答案 1 :(得分:1)
尚未提及的另一种可能的解决方案是保持主循环并为10秒的“循环”注册一个计时器事件。
$timer = new-object timers.timer
$action = {
# Edit me... put whatever you want to be done every 10 seconds here instead.
write-host "Timer Elapse Event: $(get-date -Format ‘HH:mm:ss’)" -ForegroundColor Cyan
}
$timer.Interval = 10000 #10 seconds
Register-ObjectEvent -InputObject $timer -EventName elapsed –SourceIdentifier '10secTimer' -Action $action
$timer.start()
while ($true) {
Write-Host 'Append to file...'
Start-Sleep -Seconds 3
}
#to stop run
$timer.stop()
#cleanup
Unregister-Event 10secTimer
您还可以使用一个while
循环并利用Stopwatch对象检查何时经过10秒钟,然后执行另一项操作。
$StopWatch = New-Object -TypeName 'System.Diagnostics.Stopwatch'
$StopWatch.Start()
while ($true) {
Write-Host 'Do stuff...' -ForegroundColor Cyan
Write-Host "$($StopWatch.Elapsed.Seconds) seconds elapsed"
Start-Sleep -Milliseconds 1000
if ($StopWatch.Elapsed.Seconds -ge 10) {
# Put everything for your 10 seconds here.
Write-Host 'Do other stuff...' -ForegroundColor Green
$StopWatch.Reset()
$StopWatch.Start()
}
}
$StopWatch.Stop()
要回答“两个同时为真”,如果您想像示例一样使用2 While循环,则需要在内部循环中添加一个break
语句返回外循环。
while ($true) {
Write-Host 'Outer loop...'
Start-Sleep -Seconds 3
While ($true) {
Write-Host 'Inner loop...'
break; # If you don't break, you'll never exit the inner loop.
}
}
答案 2 :(得分:0)
使用modulus operator %
,除以数字后将计算提醒:
PS > 5 % 2
1
=> 5/2 = 4休息1
PS > 250 % 250
0
在您的函数中使用$I++
跟踪执行频率,并将if
与%
一起使用
每10秒执行一次(10秒/ 0.040秒= 250)
$I = 0
$I++
If (($I % 250) -eq 0) { do x }