質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

1回答

894閲覧

Macのディスプレイスリープ中に処理が止まらないようにしたい

taylor

総合スコア37

Cocoa

CocoaはMac OS X用のアプリケーションを構築する為の主要なフレームワークのひとつです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

1クリップ

投稿2017/09/19 16:34

編集2017/09/20 08:00

###前提・実現したいこと
Swift3 、Macアプリケーション(Foundation)
Macのディスプレイスリープ中に処理を継続したい

###発生している問題・エラーメッセージ

NSConditionを用いて同期通信で一定時間ごとにデータを受け取り続ける(メモリに貯めるだけ)プログラムを書いたのですが、Macのディスプレイ(本体ではない)がスリープになると(再度ユーザー認証が必要な状態になると)処理が止まっているようです。以前非同期(NSConditionを使わない)で書いた同様のプログラムではこの問題は発生していなかったので、NSConditionが関係あるかと思っています。

###該当のソースコード

//ボタンを押すとこのコードが実行される(抜粋) func doURLSession(request:URLRequest) -> Any{ var output:Any = 0 let condition = NSCondition() let task = URLSession.shared.dataTask(with: request) { data, response, error in condition.lock() if let data = data{ do { output = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) } catch { output = "URLSession failed" } } else { } condition.signal() condition.unlock() } condition.lock() task.resume() condition.wait() condition.unlock() return output } func 一連の動き(){ let 受け取ったデータ = doURLSession(request:リクエスト) print(受け取ったデータ) } var timer = Timer() func doTimer(){ self.timer = Timer.scheduledTimer(timeInterval: TimeInterval(タイマー間隔), target: self, selector: #selector(一連の動き), userInfo: nil, repeats: true) } doTimer()

###試したこと
NSConditionを用いない場合はうまくいくようです。

###補足情報(言語/FW/ツール等のバージョンなど)
Swift3/Cocoa macOS Sierra 10.12.6 iMac Mid 2011

###追記
省エネルギー環境設定
スクリーンセーバ・ディスプレイオフの環境設定
(ホットコーナーを利用しています。スクリーンセーバでも処理が止まってしまいます。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Stripe

2017/09/20 03:23

これは、GUIのあるアプリですか? それともコマンドラインツールですか?
taylor

2017/09/20 03:26

ありがとうございます、GUIのあるアプリです! XcodeでCocoa Applicationとして作っています。ちなみにシングルビューです。
taylor

2017/09/20 03:30

コードはすべてViewController内に記述しています。
fuzzball

2017/09/20 05:06

設定画面のスクリーンショットを乗せられますか?私の環境(mini + Sierra)では、PC本体を「スリープさせない」という独立した設定がありません。また、本体がスリープしていないのはどうやって確認しましたか?
taylor

2017/09/20 08:03

スクリーンショットを追加しました。本体のスリープの有無は今回は特に確認していませんが、今回のアプリにNSConditionを追加する前は処理が止まっていなかったので、本体はスリープしていないはず、と認識しています。念のためこれから確認したいと思います。
taylor

2017/09/21 04:58 編集

画面スリープの状態でFaceTimeをかけてみましたが、反応しませんでした。やはり本体がスリープしているのかFaceTimeの仕様なのかは調べましたがわかりません...。
taylor

2017/10/11 09:28

遅くなり申し訳ありません!iMacで有線接続のキーボードやマウスを持っていないので、Bluetoothをoffにする確認はできません...いずれにしろ、OS側のエラーなのであれば、アップデートでの改善を期待したいですね。ありがとうございます。
guest

回答1

0

アイドル/蓋とじスリープを無効化できるアプリ InsomniaX はいかがでしょうか?
InsomniaX | semaja2

そもそもスリープさせたくないのであれば、私はわかりません。

投稿2017/09/19 18:28

takna

総合スコア784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taylor

2017/09/20 01:05

回答ありがとうございます。 処理が数時間かかるので、できればディスプレイはオフにしておきたいです。そうすると内部の処理も止まってしまうのでしょうか?
takna

2017/09/20 07:07

同アプリ "Disable Idle Sleep" & "Sleep Display Now" で、 ご要望の結果が得られます。
taylor

2017/09/20 08:04

ありがとうございます、みてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問