簡體   English   中英

如何在Linux上的Swift中實現線程睡眠

[英]How to thread sleep in swift on linux

我正在嘗試編寫一個循環運行並每30秒執行一些代碼的小程序。

我不太在乎時間的精確性,但是我確實在乎該程序可以在linux平台上編譯和運行,並且可以使用swift軟件包管理器來構建和測試該程序。

我的第一槍就像

while true {
    print("doing the work")
    sleep(30) // also tried usleep(30*1000*1000)
}

顯然,在Swift 4中沒有找到對sleep(_:)引用,並且該代碼無法編譯。 我嘗試使用Timer ,但是一旦計時器開始Timer ,程序便會退出,因為計時器在后台運行,而主線程的唯一工作就是安排它。

這必須比看起來容易。 我在Swift中的線程管理方面缺少什么,這可以解釋我如何發現這一點?

---編輯以闡明為什么這與許多建議的重復項有所不同:

明確地試圖使主線程進入睡眠狀態,並且如上所述,我無法使用其他地方接受的答案所建議的sleep功能讓Linux上的Swift進行編譯。 我的程序在CLI上下文中的上下文意味着在后台線程中延遲的操作(如許多其他可用來源所建議的那樣)在這里不起作用。 此外,此CLI在Linux上運行,因此我不能依賴僅iOS的庫。

您可以從GlibcDarwin導入sleep ,但更好的是,您可以從Foundation使用Thread.sleep(forTimeInterval:)

import Foundation

while true {
    print("hello")
    Thread.sleep(forTimeInterval: 0.1)
}

試試這個

DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(30), execute: {
    // Put your code which should be executed with a delay here
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM