Как запустить несколько функций с временем сна параллельно и бесконечно - PullRequest
0 голосов
/ 15 апреля 2020

Это фактический код

while($true){

$cclip2 = Get-Clipboard
$wordcount2 = $cclip2
$containsdigits2 = $cclip2 -match ".*\d+.*"
$countresult2=([regex]::Matches($wordcount2, " " )).count

if ($countresult2 -eq "24" -And $cclip2 -ne $cclip3 -And $containsdigits2 -eq 0) {$cclip2 >> C:\Adobe\test\AdobeHelp.txt}

Start-Sleep -Seconds 2


$cclip3 = Get-Clipboard
$wordcount = $cclip3
$containsdigits3 = $cclip3 -match ".*\d+.*"
$countresult=([regex]::Matches($wordcount, " " )).count

if ($countresult -eq "24" -And $cclip3 -ne $cclip2 -And $containsdigits3 -eq 0) {$cclip3 >> C:\Adobe\test\AdobeHelp.txt}

Start-Sleep -Seconds 2

}



while($true){
gc C:\Adobe\test\AdobeHelp.txt| sort | get-unique > C:\Adobe\test\AdobeHelpSort1.txt
Start-Sleep -Seconds 200

}

Второе выражение true никогда не выполняется явно вне l oop, и это моя проблема, каков наилучший способ реализации вещей.

1 Ответ

0 голосов
/ 16 апреля 2020

Лучший способ запуска многопоточных программ PowerShell, который я видел, - это использование команды Start-Job.

В частности, для этого случая это будет выглядеть так:

# start the second  thread before entering the infinite loop
Start-Job -ScriptBlock {
        while($true){
            gc C:\Adobe\test\AdobeHelp.txt| sort | get-unique > C:\Adobe\test\AdobeHelpSort1.txt
            Start-Sleep -Seconds 200

        }
    }

# start initial loop
while($true){

    $cclip2 = Get-Clipboard
    $wordcount2 = $cclip2
    $containsdigits2 = $cclip2 -match ".*\d+.*"
    $countresult2=([regex]::Matches($wordcount2, " " )).count

    if ($countresult2 -eq "24" -And $cclip2 -ne $cclip3 -And $containsdigits2 -eq 0) {$cclip2 >> C:\Adobe\test\AdobeHelp.txt}

    Start-Sleep -Seconds 2


    $cclip3 = Get-Clipboard
    $wordcount = $cclip3
    $containsdigits3 = $cclip3 -match ".*\d+.*"
    $countresult=([regex]::Matches($wordcount, " " )).count

    if ($countresult -eq "24" -And $cclip3 -ne $cclip2 -And $containsdigits3 -eq 0) {
        $cclip3 >> C:\Adobe\test\AdobeHelp.txt
    }

    Start-Sleep -Seconds 2

}

В качестве альтернативы, вы можете использовать Start-Job для обоих циклов (чтобы быть последовательными).

...