Возобновление приостановленного потока в Delphi 2010?

Это так не походит на вопрос о таблицах/столбцы, но о нормализации. В некоторых ситуациях имеют высокую степень , нормализация ("больше таблиц" в этом случае) является хорошей, и чистой, но она обычно берет высокое количество СОЕДИНЕНИЙ для получения релевантных результатов. И с достаточно большим набором данных, это может сорвать производительность.

Jeff записал немного об этом относительно дизайна StackOverflow. См. также сообщение, ссылки Jeff на Отваживаются Obasanjo.

16
задан jpfollenius 26 October 2009 в 10:26
поделиться

2 ответа

Причина в том, что поток не должен запускаться сам .

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

Аналогичная ситуация - конструктор TDataSet : нет TDataSet конструктор должен когда-либо вызывать Open или устанавливать Active: = True .

См. также эту запись в блоге Wings of Wind .

Вам следует:

  • Создайте приостановленный TMyThread, вызвав Create (true), и выполните Start вне вашего класса TMyThread
  • Создайте TMyThread без приостановки, убедившись, что конструктор Create выполняет полную инициализацию, и позвольте TThread.
18
ответ дан 30 November 2019 в 17:27
поделиться

Краткий ответ: вызов унаследованного Create (false) и опускание Start!

Фактический запуск потока без приостановки создания выполняется в AfterConstruction, который вызывается после вызова всех конструкторов.

14
ответ дан 30 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

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