powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как разбить процессы по потокам?
17 сообщений из 17, страница 1 из 1
Как разбить процессы по потокам?
    #32249282
Amor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как разбить процессы по потокам?
Если можно, то поподробнеее
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32249291
Фотография cyc10ne
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и такие люди не дай бог работают программерами

в отстойник!
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32249295
sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sv
Гость
C:\Program Files\Borland\Delphi7\Demos\Threads\
отличная демка
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32249489
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Amor
процесс по потокам... ты хоть сам понял что сказал? Если что, процессу не выделяется время... процесс и поток это раные сущности...

sv
Не рекомендую использовать класс TThread. Несколько раз наталкивался в книгах на сообщения о его глючности. А выловить глюк в многопоточном приложении... так это проще удавиться. Я пользуюсь API функциями Windows. например CreateThread... И сопутствующие ей.
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32249698
Андрей GR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To: StarWind
А можно подробней?!
Я сейчас занимаюсь подробным изучением класса Thread...
Было бы очень здорово, если ссылки кинешь на статьи.
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32249699
Андрей GR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To: StarWind
А можно подробней?!
Я сейчас занимаюсь подробным изучением класса Thread...
Было бы очень здорово, если ссылки кинешь на статьи.
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32249750
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на что подробнее?
про глюки я читал, где не помню и сам не рискнул проверять. Посмотрел когда на апи виндов, мне показалось что так работать проще.
посмотри хелп по CreateThread и сопутствующие ей функции, думаю многое станет понятно. Можно почитать практически в любой книге, где описаны потоки. Вот например как можно организовать запуск функции класса в отдельном потоке. Создается объект Disp.DispQueue в котором есть интересующая нас функция и выполняем

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
function StartDispatcher(ptr :pointer):DWord; stdcall; // описание функции, ее описание должно быть именно таким

CreateThread(nil, 0 ,@StartDispatcher,pointer(Disp.DispQueue), 0 ,Tid); // запускаем поток

function StartDispatcher(ptr :pointer):DWord; // функция потока
begin
 TAbstractCmdProcessor(ptr).Execute;
end;

а если использовать класс дельфи, то пишешь наследнка класса, где переопределяешь метод Execute, которым и является функция потока. Создаешь класс, и в зависимости от параметра при создании, у тебя поток либо сказу запускается либо ждет команды Resume.

Тонкость, потоки хорошо работают и не доставляют хлопот пока они не пользуются общими данными. Как только они начинают пересекаться по данным, нужно синхронизировать потоки. Средства синхронизации: критическая секция, события, мьютексы, семафоры. В зависимости от ситуации используется тот или иной способ синхронизации. Внутри одного процесса, как правило чаще всего используется наиболее быстрый механизм это критические секции. Между процессами это мьютексы, делают примерно тоже, с некоторыми отличиями
Ну вот если кратенько, то все
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32249757
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глянь здесь:
http://www.compress.ru/Article.asp?id=2164

если надо, у меня есть эта статья в MS Word
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32249761
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а подробно изучать в этом классе нечего
глючат в нем встроенные средства синхронизации, причем под одной виндой нормально, под второй траблы.
полюс мне не понравилось что событие onTerminate пропогандируется как выполняющееся в контексте главного потока, а реально нет, так же как и метод terminate не развязан средствами синхронизации. Единственный метод которому я пока не нашел аналог в api (может потоому что и не пытался искать) так это sinhronyze. Но тут обойти api виндов невозможно, а по тому значит существует и апишная функция, да и к тому же более гибкая.
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32249764
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Speaker
прекрасная ссылка, все по русски и красиво
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32250047
sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sv
Гость
Кто-нибудь еще сталкивался с глюками в TThread?
Интересно было-бы узнать.
нашел вот про Delphi 6
о Delphi 7 ничего нету
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32250644
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно, а в чем проявляются глюки?

Я, правда, не испробовал все случаи применения потоков, но - в тех приложениях, где использовал, глюков не было. Причем и под W95, и под NT/2k. Использовал критические секции и события. Да в исходниках у Борланда, в общем, все тоже - CreateThread, InitializeCriticalSection...

... выловить глюк в многопоточном приложении... так это проще удавиться ..
Кстати, есть еще такая штука, как определение наиболее эффективной организации потоков... Ничуть не легче отладки.
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32250783
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aag
конкретно глюк с функцией WaitFor. О нем упоминается в книге "Delphi 6 и COM". По мойму как-то так называется, красная книга. Я не рискнул проверять есть они или нет, дабы потом все не переписывать и выбрал для использования API виндов, тем более что функции там все кристально чистые и понятные.
а про эфективную организацию... ты имеешь ввиду чтоб они не ждали друг друга? Ну вот в текущем проекте может у меня маленько попроще, там прога выделяется в самостоятельные блоки, причем по логике и взаимодействие между ними через очередь (опять же написанную самостоятельно). Так что в моем случае немного проще, одной проблемы практически нет.
Андрей GR
да, обязательно почитай или по соображай, когда будешь синхронизацию изучать про взаимоблокировки, иначе можно получить очередную пачку сюрпризов.
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32251076
sv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
sv
Гость
Да говорю же я Вот
Сорри в предыдущий раз не ту ссылку вставил!
;-)

Но это только для Delphi 6 без всяких патчей.
А в 7-й должно все быть ок!
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32251098
StarWind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sv
ну вот а я к тому же на пятой дельфе сижу...
надо будет всеж уточнить работу метода Synchronize....
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32251200
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чего его уточнять? Он в букварях хорошо описан. Создает временное невидимое окнов главном GUI-потоке, кидает ему виндовое сообщение через SendMessage с указателем на процедуру, которую надо исполнить. Как только очередь обработки сообщений дойдет до обработки этого сообщения, процедура будет исполнена. Так как SendMessage не возвращает управление, пока не получит результат, поток, вызвавший Synchronize, стоит и ждет до тех пор, пока требуемая процедура не выполниться главным потоком.
...
Рейтинг: 0 / 0
Как разбить процессы по потокам?
    #32251284
SiDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть приложение нек-ое.
Компиляю в 5 - все ок, работает.
Компиляю в 6,7 - затыкается на методе синхронайз.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как разбить процессы по потокам?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]