Перекрестная коммуникация потока в Delphi

Аргументы ключевых слов могут иметь значение по умолчанию. В этом случае значения по умолчанию a и b равны None. Это означает, что когда эти аргументы не передаются в функцию, для a и b устанавливается значение None.

Пример:

def func(a=None):
    print(a)
func()
>>>None

Но если вы сделаете что-то вроде этого:

def func(a):
    print(a)
func()
>>>TypeError: func() missing 1 required positional argument: 'a'
6
задан samir105 13 January 2009 в 13:32
поделиться

3 ответа

Можно только отправить (Windows) сообщения в потоки, которые реализуют стандартный цикл сообщения, который будет автоматически создан, после того как дескриптор окна понят.

Однако не необходимо использовать сообщения для общения с потоком. Просто позвольте ему ожидать на объекте-событии (TEvent в VCL) и сигнализировать об этом событии, когда Вы захотите, чтобы поток выполнил функцию.

Но если Вы плохо знакомы с многопоточностью - не вдаются во все эти подробности самостоятельно, если Вы не хотите для эффекта изучения. Просто используйте OmniThreadLibrary и будьте сделаны с ним. Существует много пользы, которая будет изучена путем рытья в ее внутренности, после того как Вы знаете, как использовать ее.

Править:

См. также ответы на этот вопрос, который очень похож.

Редактирование 2:

Относительно комментария, спрашивающего, "Что [OmniThreadLibrary] делает легче, и в том, что стоит?" Я могу только советовать Вам проверять его для себя - это - то, при использовании, по крайней мере, Delphi 2007. Существует несколько образцов для иллюстрирования понятий, но для быстрого "реального" примера Вы могли взглянуть на это сообщение в блоге - Вы не должны даже устанавливать библиотеку для этого.

Я действительно также соглашаюсь, что пользование библиотекой для многопоточности действительно требует определенного испытания веры. OTOH, умеющий обойтись тем, что обеспечивает VCL, является едва альтернативой. Пример кода действительно все еще использует непродуманное, Синхронизируют () вызов. Нет никакой поддержки вещей как ориентированные на многопотоковое исполнение потребительские очереди производителя, которые намного больше подходят для многопоточного программирования. И если Вы действительно соглашаетесь необходимость в более твердом заду для многопоточных программ, чем VCL обеспечивает - почему заново изобретают то конкретное колесо?

Что касается стоимости пользования библиотекой: Вы будете иметь ко времени сами, достаточно ли это быстро для Вас. Это действительно абстрагирует коммуникацию между потоками хорошим способом, по моему скромному мнению, но каждая абстракция стоит производительности, очевидно.

Если Вы решаете, что это не для Вас, в конце концов - пишут код самих. Я сделал то же для Delphi 4, и я использовал тот код в течение почти 10 лет теперь. И судя количеством ошибок я нашел и угловые случаи, которые я испытал в то время, я буду определенно советовать кому-либо плохо знакомому с многопоточностью не писать их собственный код библиотеки для него. И если Вы действительно действительно хотите, возьмите правила в этой регистрации на основу.

11
ответ дан 8 December 2019 в 18:43
поделиться

Многопоточность Delphi вопроса обменивается сообщениями, Цикл также содержит несколько примеров коммуникации между потоками

3
ответ дан 8 December 2019 в 18:43
поделиться

Если у Вас есть ссылка на объект потока, можно просто назвать его прямым, и иметь процедуру, хранят информацию или обновление соответственно. Очевидно, необходимо стараться сделать вещи ориентированным на многопотоковое исполнение способом.

С другой стороны, Вы могли использовать центральный объект управления, через который связываются потоки, когда они не заняты. У меня есть приложение, где потоки имеют конкретные цели и выделяются идентификатор потока. Любой поток может "добавить" сообщение с идентификатором сообщения и строкой для параметров к другому идентификатору потока и затем продолжить его работу. Другой поток выборы это на его досуге, и действует соответственно.

-1
ответ дан 8 December 2019 в 18:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: