Avatar
ふむふむ
7:14 AM
#other-lang に書いた C ライブラリとの連携で,別ターゲットとして埋め込んで使っているので,その部分だけ最適化をオフにすると正常に動作するようになるかなと思いまして🙄
7:19 AM
また別の質問なんですが,DispatchWorkItem って cancel 呼んでも止められる訳ではないんですね.「一つの処理に時間がかかりすぎてる場合に停止する(メモリとかも解放する)」って,プロセスそのものを分けないと無理なんでしょうか? let semaphore = DispatchSemaphore(value: 0) let mainTask = DispatchWorkItem { while true { print("working...") sleep(1) } } let bgTask = DispatchWorkItem { for i in 0 ..< 3 { print(i) sleep(1) } semaphore.signal() } DispatchQueue.global(qos: .userInitiated).async(execute: mainTask) DispatchQueue.global(qos: .background).async(execute: bgTask) semaphore.wait() mainTask.cancel() bgTask.cancel() print("canceled") sleep(10) // まだ working... が出続ける
7:21 AM
上の例なら mainTask の while 時に !isCancelled としたりできますが,僕が扱いたいのはここがループではなくてとても重くなる可能性のある長い処理です.