Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/ipc/glue/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 2 kB image not shown  

Quelle  IOThread.h   Sprache: C

 
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */


#ifndef mozilla_ipc_IOThreadParent_h
#define mozilla_ipc_IOThreadParent_h

#include "base/thread.h"
#include "chrome/common/ipc_channel.h"
#include "mozilla/ipc/ScopedPort.h"

namespace mozilla::ipc {

// Abstract background thread used for IPC I/O.
class IOThread : private base::Thread {
 public:
  // Lifecycle Note: The IOThread is stored in a static, and is returned by raw
  // pointer here from potentially any thread. This is OK because the IOThread
  // is very long lived, and should outlive any other thread which would
  // reference it (other than the main thread, which is responsible for the
  // lifetime of the IO Thread).
  static IOThread* Get() { return sSingleton; }

  // Get the nsISerialEventTarget which should be used to dispatch events to run
  // on the IOThreadBase.
  nsISerialEventTarget* GetEventTarget() {
    return base::Thread::message_loop()->SerialEventTarget();
  }

 protected:
  IOThread(const char* aName);
  ~IOThread();

  // Called by subclasses in the constructor/destructor to start/join the target
  // thread. This cannot be done in the base class constructor/destructor, as
  // the virtual Init()/CleanUp() methods need to be available.
  void StartThread();
  void StopThread();

  // Init() and Cleanup() methods which will be invoked on the IOThread when the
  // IOThread is started/stopped.
  void Init() override = 0;
  void CleanUp() override = 0;

 private:
  static IOThread* sSingleton;
};

// Background I/O thread used by the parent process.
class IOThreadParent : public IOThread {
 public:
  IOThreadParent();
  ~IOThreadParent();

 protected:
  void Init() override;
  void CleanUp() override;
};

// Background I/O thread used by the child process.
class IOThreadChild : public IOThread {
 public:
  IOThreadChild(IPC::Channel::ChannelHandle aClientHandle,
                base::ProcessId aParentPid);
  ~IOThreadChild();

  mozilla::ipc::ScopedPort TakeInitialPort() { return std::move(mInitialPort); }

 protected:
  void Init() override;
  void CleanUp() override;

 private:
  mozilla::ipc::ScopedPort mInitialPort;
  IPC::Channel::ChannelHandle mClientHandle;
  base::ProcessId mParentPid;
};

inline void AssertIOThread() {
  MOZ_ASSERT(IOThread::Get()->GetEventTarget()->IsOnCurrentThread(),
             "should be on the async IO event target");
}

}  // namespace mozilla::ipc

#endif  // mozilla_ipc_IOThreadParent_h

100%


¤ Dauer der Verarbeitung: 0.25 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung ist noch experimentell.