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

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

sv
Не рекомендую использовать класс TThread. Несколько раз наталкивался в книгах на сообщения о его глючности. А выловить глюк в многопоточном приложении... так это проще удавиться. Я пользуюсь API функциями Windows. например CreateThread... И сопутствующие ей.
...
Рейтинг: 0 / 0
28.08.2003, 10:42
    #32249698
Андрей GR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разбить процессы по потокам?
To: StarWind
А можно подробней?!
Я сейчас занимаюсь подробным изучением класса Thread...
Было бы очень здорово, если ссылки кинешь на статьи.
...
Рейтинг: 0 / 0
28.08.2003, 10:42
    #32249699
Андрей GR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разбить процессы по потокам?
To: StarWind
А можно подробней?!
Я сейчас занимаюсь подробным изучением класса Thread...
Было бы очень здорово, если ссылки кинешь на статьи.
...
Рейтинг: 0 / 0
28.08.2003, 11:14
    #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
28.08.2003, 11:18
    #32249757
Speaker
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разбить процессы по потокам?
Глянь здесь:
http://www.compress.ru/Article.asp?id=2164

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

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

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

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


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