Skip to content

Commit

Permalink
fix last issues & update aio version
Browse files Browse the repository at this point in the history
  • Loading branch information
aapolkovsky committed Dec 4, 2016
1 parent 85c07ae commit c7994a2
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
6 changes: 3 additions & 3 deletions aio/design-patterns.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ int main()

Лямбда-функция связывается с сигналом **s** с помощью функции `connect()`. Так как лямбда-функция удовлетворяет требуемой сигнатуре `void()`, связывание произошло успешно. Лямбда-функция будет вызвана всякий раз, когда сработает сигнал **s**.

Сигнал посылается с помощью вызова **s** как обычной функции. Сигнатура этой функции совпадает с той, которая была передана в качестве шаблонного параметра. Скобки пусты потому, что `void()` не принимает никаких аргументов. Вызов **s** приводит к срабатыванию сигнала, что в свою очередь вызывает лямбда-функцию, которая была ранее связана с помощью `connect()`.
Сигнал посылается с помощью вызова объекта **s** так же, как вы вызываете обычную функцию. Сигнатура этой функции совпадает с той, которая была передана в качестве шаблонного параметра. Скобки пусты потому, что `void()` не принимает никаких аргументов. Вызов **s** приводит к срабатыванию сигнала, что в свою очередь вызывает лямбда-функцию, которая была ранее связана с помощью `connect()`.

[Пример 67.1](#ex.signals2_01) так же может быть реализован с помощью `std::function`, так как показано в [Примере 67.2](#ex.signals2_02).

Expand Down Expand Up @@ -429,7 +429,7 @@ int main()

Тем не менее, в [Примере 67.14](#ex.signals2_14) умный указатель связывается со слотом путем вызова `track()`. Так как тип слота зависит от сигнала, `boost::signals2::signal` предоставляет тип `slot_type` для доступа к требующемуся типу. `slot_type` ведет себя так же, как `std::bind`, что позволяет передавать оба параметра для описания слота напрямую. `track()` может связать слот с умным указателем типа `boost::shared_ptr`. Затем объект отслеживается, что приводит к тому, что слот будет автоматически удален, как только отслеживаемый объект разрушится.

Для того, чтобы управлять объектами с другими умными указателями, слоты предоставляют функцию под названием `track_foreign()`. В то время как `track()` принимает умный указатель типа `boost::shared_ptr`, `track_foreign()` позволяет, например, использовать умный указатель типа `std::shared_ptr`. Умные указатели, кроме `std::shared_ptr` и `std::weak_ptr`, должны быть добавлены в Boost.Signals2, прежде чем они могут быть переданы в `track_foreign()`.
Для того, чтобы управлять объектами с другими умными указателями, слоты предоставляют функцию под названием `track_foreign()`. В то время как `track()` принимает умный указатель типа `boost::shared_ptr`, `track_foreign()` позволяет, например, использовать умный указатель типа `std::shared_ptr`. Поддержка умных указателей, кроме `std::shared_ptr` и `std::weak_ptr`, должна быть добавлена в Boost.Signals2, прежде чем эти указатели могут быть переданы в `track_foreign()`.

Подписчик конкретного события может получить доступ к объекту типа `boost::signals2::signal` для создания новых связей или разрыва связи существующих.

Expand Down Expand Up @@ -487,7 +487,7 @@ int main()

В [Примере 67.16](#ex.signals2_16) не создаются новые связи, а вместо этого - разрываются существующие. Как и в [Примере 67.15](#ex.signals2_15), ничего не будет выведено в стандартный поток вывода.

Такое поведение можно объяснить довольно просто. Представьте себе, что всякий раз, когда срабатывает сигнал создается временная копия всех слотов. Вновь созданные связи не будут добавлены во временную копию и, следовательно, могут быть вызваны только при следующим срабатывании сигнала. С другой стороны, разорванные связи по-прежнему часть временной копии, но, чтобы избежать вызова функции-члена объекта, который уже был разрушен, будут проверяться объединителем при разыменовывании ссылки.
Такое поведение можно объяснить довольно просто. Представьте себе, что всякий раз, когда срабатывает сигнал создается временная копия всех слотов. Вновь созданные связи не будут добавлены во временную копию и, следовательно, могут быть вызваны только при следующим срабатывании сигнала. А разорванные связи по-прежнему будут частью временной копии и, для того, чтобы избежать вызова функции-члена уже разрушенного объекта, будут проверяться объединителем при разыменовывании.

<a id="multithreading"></a>
## Многопоточность
Expand Down
6 changes: 3 additions & 3 deletions translated/boost.signals2.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ int main()

Лямбда-функция связывается с сигналом **s** с помощью функции `connect()`. Так как лямбда-функция удовлетворяет требуемой сигнатуре `void()`, связывание произошло успешно. Лямбда-функция будет вызвана всякий раз, когда сработает сигнал **s**.

Сигнал посылается с помощью вызова **s** как обычной функции. Сигнатура этой функции совпадает с той, которая была передана в качестве шаблонного параметра. Скобки пусты потому, что `void()` не принимает никаких аргументов. Вызов **s** приводит к срабатыванию сигнала, что в свою очередь вызывает лямбда-функцию, которая была ранее связана с помощью `connect()`.
Сигнал посылается с помощью вызова объекта **s** так же, как вы вызываете обычную функцию. Сигнатура этой функции совпадает с той, которая была передана в качестве шаблонного параметра. Скобки пусты потому, что `void()` не принимает никаких аргументов. Вызов **s** приводит к срабатыванию сигнала, что в свою очередь вызывает лямбда-функцию, которая была ранее связана с помощью `connect()`.

[Пример 67.1](#ex.signals2_01) так же может быть реализован с помощью `std::function`, так как показано в [Примере 67.2](#ex.signals2_02).

Expand Down Expand Up @@ -413,7 +413,7 @@ int main()

Тем не менее, в [Примере 67.14](#ex.signals2_14) умный указатель связывается со слотом путем вызова `track()`. Так как тип слота зависит от сигнала, `boost::signals2::signal` предоставляет тип `slot_type` для доступа к требующемуся типу. `slot_type` ведет себя так же, как `std::bind`, что позволяет передавать оба параметра для описания слота напрямую. `track()` может связать слот с умным указателем типа `boost::shared_ptr`. Затем объект отслеживается, что приводит к тому, что слот будет автоматически удален, как только отслеживаемый объект разрушится.

Для того, чтобы управлять объектами с другими умными указателями, слоты предоставляют функцию под названием `track_foreign()`. В то время как `track()` принимает умный указатель типа `boost::shared_ptr`, `track_foreign()` позволяет, например, использовать умный указатель типа `std::shared_ptr`. Умные указатели, кроме `std::shared_ptr` и `std::weak_ptr`, должны быть добавлены в Boost.Signals2, прежде чем они могут быть переданы в `track_foreign()`.
Для того, чтобы управлять объектами с другими умными указателями, слоты предоставляют функцию под названием `track_foreign()`. В то время как `track()` принимает умный указатель типа `boost::shared_ptr`, `track_foreign()` позволяет, например, использовать умный указатель типа `std::shared_ptr`. Поддержка умных указателей, кроме `std::shared_ptr` и `std::weak_ptr`, должна быть добавлена в Boost.Signals2, прежде чем эти указатели могут быть переданы в `track_foreign()`.

Подписчик конкретного события может получить доступ к объекту типа `boost::signals2::signal` для создания новых связей или разрыва связи существующих.

Expand Down Expand Up @@ -471,7 +471,7 @@ int main()

В [Примере 67.16](#ex.signals2_16) не создаются новые связи, а вместо этого - разрываются существующие. Как и в [Примере 67.15](#ex.signals2_15), ничего не будет выведено в стандартный поток вывода.

Такое поведение можно объяснить довольно просто. Представьте себе, что всякий раз, когда срабатывает сигнал создается временная копия всех слотов. Вновь созданные связи не будут добавлены во временную копию и, следовательно, могут быть вызваны только при следующим срабатывании сигнала. С другой стороны, разорванные связи по-прежнему часть временной копии, но, чтобы избежать вызова функции-члена объекта, который уже был разрушен, будут проверяться объединителем при разыменовывании ссылки.
Такое поведение можно объяснить довольно просто. Представьте себе, что всякий раз, когда срабатывает сигнал создается временная копия всех слотов. Вновь созданные связи не будут добавлены во временную копию и, следовательно, могут быть вызваны только при следующим срабатывании сигнала. А разорванные связи по-прежнему будут частью временной копии и, для того, чтобы избежать вызова функции-члена уже разрушенного объекта, будут проверяться объединителем при разыменовывании.

<a id="multithreading"></a>
## Многопоточность
Expand Down

0 comments on commit c7994a2

Please sign in to comment.