Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Потоки в Builder

293
12 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Есть такая программа она сначало генерирует SQL строки а потом пихает их серваку. Действует последовательно
Решил я сделать чтобы в одном потоке эти строки генерились, а в другом потоке они отдавались на обработку серверу. И во с чем я столкнулся
Обработка одного потока не начинается пока не закончиться работа второго. В чем косяк или это как в анекдоте "подожди сынок, дискетку отформатирую".
Вот пример
w = new load(false); //в этом потоке запускается интерпретатор и сливает строки в ListBox
q = new LOC(false); // в этом потоке, по идеи, проверяеться если listbox не пустой, то забрать строку и сделать сней че нибудь, а после того как забрал удалить

при этом после запуска w основной поток не отвечает пока не завершиться он
310
12 августа 2003 года
fellow
853 / / 17.03.2003
А что произойдёт, если потоки создавать приостановленные и запускать их после создания?
293
12 августа 2003 года
SEDEGOFF
586 / / 06.10.2002
Да все так же
а вот если вместо
Synchronize(lp);
написать просто
lp();
то потоки живут одельно от основного
3
12 августа 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by SEDEGOFF
Есть такая программа она сначало генерирует SQL строки а потом пихает их серваку. Действует последовательно
Решил я сделать чтобы в одном потоке эти строки генерились, а в другом потоке они отдавались на обработку серверу. И во с чем я столкнулся
Обработка одного потока не начинается пока не закончиться работа второго. В чем косяк или это как в анекдоте "подожди сынок, дискетку отформатирую".
Вот пример
w = new load(false); //в этом потоке запускается интерпретатор и сливает строки в ListBox
q = new LOC(false); // в этом потоке, по идеи, проверяеться если listbox не пустой, то забрать строку и сделать сней че нибудь, а после того как забрал удалить

при этом после запуска w основной поток не отвечает пока не завершиться он



Обработчики то, все равно, работают в одном потоке, в том, где цикл обработки сообщений. Вот и получается, что вставляешь ты строку в ListBox с помощью SendMessage, и пока обработчик сообщения не отработает (в этом или другом потоке), этот поток ожидает. Аналогично с потоком, который выбирает строки из listBox. Видимо, они мешают друг другу.

989
13 августа 2003 года
Vlad232ua
182 / / 02.04.2003
Цитата:
Originally posted by Green


Обработчики то, все равно, работают в одном потоке, в том, где цикл обработки сообщений. Вот и получается, что вставляешь ты строку в ListBox с помощью SendMessage, и пока обработчик сообщения не отработает (в этом или другом потоке), этот поток ожидает. Аналогично с потоком, который выбирает строки из listBox. Видимо, они мешают друг другу.


Очень похоже на правду. Я еще обратил внимание, что если торчит While по terminated и прога должна крутиться постоянно, пока юзер че-то не нажмет или пока полностью не проскочит, скажем так - "достаточно длительная обработка", то такая конструкция практически не работоспособна или приоритеты потоков должны быть ниже чем приоритет главной формы (сервиса). Я просто отказался от конструкции
while(!Terminated){Synchronize(..);} если с ней поиграться при нескольких потоках с одинаковыми приоритетами и при этом че-то выводить на экран, то видно, что эти приоритеты фикция, тот кто первым задницей сел, тот и молотит быстрее остальных, а отсюда ИМХО и просчитывать Synchronize надо самому.

460
13 августа 2003 года
Berg
261 / / 27.03.2003
Following are issues and recommendations to be aware of when using threads:

Most methods that access a VCL object and update a form must only be called from within the main VCL thread or use a synchronization object such as TMultiReadExclusiveWriteSynchronizer.

P.S. А вообще может быть попробовать вручную их синхронизить? Например, как описано в книге Дейтла...Впрочем все семафоры, мутексы и прочее уже есть в самом билдере...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог