---
lang: ja
path: user-guide/linux-sdk/event-listener
labels: ユーザーガイド/Linux SDK/イベントリスナー利用時の注意点
metaTitle: イベントリスナー利用時の注意点 ｜ Linux SDK ｜ ユーザーガイド ｜ SkyWay（スカイウェイ）
---

# イベントリスナー利用時の注意点

このセクションでは、SkyWay Linux®︎ SDK (以下、Linux SDK ) のイベントリスナーにおける操作の注意点について説明します。

## イベントリスナー内での SDK の操作について

Linux SDK が提供する各種リソースのイベントリスナー内では、Linux SDK の状態を変更する操作や、処理を長時間ブロックする操作を行わないでください。

Linux SDK の状態を変更する操作とは、`Publish()`、`Subscribe()`、`Dispose()`、`Context::Setup()` などの処理を指します。

イベントリスナー内でこれらの操作を行った場合、デッドロックなどの予期しない挙動が発生する可能性があります。また、時間のかかる処理や同期的な待機処理を行うと、後続のイベント処理に影響を与える可能性があります。

なお、`RoomPublication::Subscriptions()` のように SDK の状態を参照するだけで、リソースの作成・変更・破棄を伴わない処理は問題ありません。

## SDK の操作が必要な場合の実行方法

イベントリスナー内で SDK の操作や時間のかかる処理が必要な場合は、別スレッドで実行してください。

以下は、`OnStreamPublished()` イベントリスナー内で `Subscribe` を行う例です。

```cpp
void ExampleRoom::OnStreamPublished(
    std::shared_ptr<skyway::room::interface::RoomPublication> publication) {
    // イベントリスナーからSkyWayの操作を行う場合は別スレッドで実行する必要があります。
    auto subscribe_thread = std::make_unique<std::thread>(
        [this, threads_publication = std::move(publication)]() mutable {
            this->Subscribe(std::move(threads_publication));
        });
    threads_.emplace_back(std::move(subscribe_thread));
}
```

スレッドの管理方法については [クイックスタート](/ja/docs/user-guide/linux-sdk/quickstart/) もご参照ください。

## 商標
Linux®︎は、米国およびその他の国における Linus Torvalds の登録商標です。
