Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с потоками [Delphi, Windows]


Дмитрий Пырин ©   (2008-04-18 09:57:00) 

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


var

ThreadID:DWORD;
...
Procedure ThreadProc(Param:DWORD);
begin
while 1=1 do
begin
 Check;
 sleep(60000);
end;
end;

....

createThread(nil,0,@ThreadProc,nil,NORMAL_PRIORITY_CLASS,ThreadID);
..



поток работает, но всё остальное висит намертво., форма не реагирует


exero   (2008-04-18 14:03:00) [1]

1. Я занимаюсь кросплатформенными приложениями т.к. устройства моего работодателя должны работать на трех основных ОС Windows, Linux и MacOS. Я бы стрельнулся делать это на чем то отличным от Java, хотя признаю проблемы были (особенно с MacOS). Разработку ПО для контроллера вел на C (как и драйвера).
2. У C# и Java есть своя ниша - и она не низкоуровневое программирование. "Лес рубят топором, а бреются бритвой". Поэтому флудить по поводу надо или не надо я не буду.


Дмитрий Пырин   (2008-04-18 13:43:00) [2]

а С# на мой взгляд, тупиковая ветвь. она приведёт лишь к тому, что вырастет поколение программистов не знающих элементарных азов работы с процессором, и на 100 % зависящих от Microsoft в правах доступа к портам ввода-вывода.


Дмитрий Пырин   (2008-04-18 13:38:00) [3]

не хочется разводить флуд :) но не удержусь всёравно.
наплевать на конкретную ОС нам никогда не позволят маркетологи. Разработчики могут сколь угодно петь про кроссплатформенность, но благодаря маркетингу максимум что мы будем иметь-это поддержку всех возможных процессоров, но никак не ОС.  Разве вы не в курсе кто тормозит развитие и внедрение в массы новых архитектур ;)


Дмитрий Пырин   (2008-04-18 13:30:00) [4]

Оккам как всегда прав :)
я нашёл про таймер, спасибо, буду пробовать


exeron   (2008-04-18 13:20:00) [5]


> а насчёт отказа от использования тредов где это возможно,

Вы меня не правильно поняли - я за то чтобы не использовать их в тех ситуациях когда они не нужны. "Не умножай сущностей сверх меры"


exero   (2008-04-18 13:14:00) [6]

Ну не знаю что вы понимаете под эстетикой.
Что касается синтаксиса - это дело привычки. А вот то что можно наплевать на конкретное железо (а в перспективе и на конкретную ОС) - это есть большой плюс - просто вы этого пока не поняли.


Дмитрий Пырин   (2008-04-18 13:12:00) [7]

а насчёт отказа от использования тредов где это возможно, я-бы не согласился.
треды и фиберы- великолепный инструмент, а учитывая современные многопроцессорные системы, они ещё актуальней. А в случаях, когда необходимо создать защищённое от крэкеров приложение, они просто незаменимы :)


Дмитрий Пырин   (2008-04-18 13:04:00) [8]

Быстрый конечный результат не столь важен, для меня важнее эстетика. С  я вообще не понимаю, слишком трудно перевариваемый синтаксис.
да и полное абстрагирование от процессора както не радует :(


exeron   (2008-04-18 12:47:00) [9]

Вообще говоря, если только начали изучать и нет никаких требований ни на размер файла и быстродействие, лучше обратите внимание на C# и Java.
Они далеко не такие тормозы какими их принято считать,(иногда Delphi плетется далеко в хвосте :( ), зато конечный результат будете получать намного быстрее.


exeron   (2008-04-18 12:40:00) [10]

KOL то у вас установлен? Если нет зайдите http://kolmck.net
А про то как работает можно почитать: http://kolmck.net/docs/KOLBook.rar
А реализацию можно посмотреть в KOL.pas


Дмитрий Пырин   (2008-04-18 12:35:00) [11]

Поток, потомучто всю жизнь писал исключительно на Ассемблере, и так было удобнее всего. А как таймер в KOL  используется ?
простите за глупые вопросы, я не так давно начал изучать ЯВУ


Дмитрий Пырин   (2008-04-18 12:33:00) [12]

к сожалению, я незнаком с реализацией на KOL :(
дайте ссылку пожалуйста.


exero   (2008-04-18 12:31:00) [13]

Вообще неясно из каких соображений вы выбрали поток, а не таймер...
"Если есть возможность обойтись без потоков - надо делать без потоков" - запомните это простое правило.


exero   (2008-04-18 12:25:00) [14]

А готовой и удобной реализацией из KOL воспользоваться не пробовали?
А вот ProcessMessages в потоке даже не вздумайте использовать!


Дмитрий Пырин   (2008-04-18 11:58:00) [15]

в каком месте кода ?


Demt   (2008-04-18 11:23:00) [16]

А кто будет ProcessMessages писать? Из-за этого и висит.


Дмитрий Пырин   (2008-04-18 10:34:00) [17]

хм.. в процедуре потока поменял местами вызов функции и паузу.


Procedure ThreadProc(Param:DWORD);
begin
while 1=1 do
begin

sleep(60000);
Check;

end;
end;



всё заработало.
Интересно, это единичный глюк, или закономерность какаято имеется ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо