-
Возникла такая проблема. необходимо создать в программе некий таймер, который через фиксированные промежутки будет производить определённые действия. попробовал реализовать это так :
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);
..
поток работает, но всё остальное висит намертво., форма не реагирует
-
хм.. в процедуре потока поменял местами вызов функции и паузу.
Procedure ThreadProc(Param:DWORD);
begin
while 1=1 do
begin
sleep(60000);
Check;
end;
end;
всё заработало. Интересно, это единичный глюк, или закономерность какаято имеется ?
-
А кто будет ProcessMessages писать? Из-за этого и висит.
-
в каком месте кода ?
-
А готовой и удобной реализацией из KOL воспользоваться не пробовали? А вот ProcessMessages в потоке даже не вздумайте использовать!
-
Вообще неясно из каких соображений вы выбрали поток, а не таймер... "Если есть возможность обойтись без потоков - надо делать без потоков" - запомните это простое правило.
-
к сожалению, я незнаком с реализацией на KOL :( дайте ссылку пожалуйста.
-
Поток, потомучто всю жизнь писал исключительно на Ассемблере, и так было удобнее всего. А как таймер в KOL используется ? простите за глупые вопросы, я не так давно начал изучать ЯВУ
-
-
Вообще говоря, если только начали изучать и нет никаких требований ни на размер файла и быстродействие, лучше обратите внимание на C# и Java. Они далеко не такие тормозы какими их принято считать,(иногда Delphi плетется далеко в хвосте :( ), зато конечный результат будете получать намного быстрее.
-
Быстрый конечный результат не столь важен, для меня важнее эстетика. С я вообще не понимаю, слишком трудно перевариваемый синтаксис. да и полное абстрагирование от процессора както не радует :(
-
а насчёт отказа от использования тредов где это возможно, я-бы не согласился. треды и фиберы- великолепный инструмент, а учитывая современные многопроцессорные системы, они ещё актуальней. А в случаях, когда необходимо создать защищённое от крэкеров приложение, они просто незаменимы :)
-
Ну не знаю что вы понимаете под эстетикой. Что касается синтаксиса - это дело привычки. А вот то что можно наплевать на конкретное железо (а в перспективе и на конкретную ОС) - это есть большой плюс - просто вы этого пока не поняли.
-
> а насчёт отказа от использования тредов где это возможно,
Вы меня не правильно поняли - я за то чтобы не использовать их в тех ситуациях когда они не нужны. "Не умножай сущностей сверх меры"
-
Оккам как всегда прав :) я нашёл про таймер, спасибо, буду пробовать
-
не хочется разводить флуд :) но не удержусь всёравно. наплевать на конкретную ОС нам никогда не позволят маркетологи. Разработчики могут сколь угодно петь про кроссплатформенность, но благодаря маркетингу максимум что мы будем иметь-это поддержку всех возможных процессоров, но никак не ОС. Разве вы не в курсе кто тормозит развитие и внедрение в массы новых архитектур ;)
-
а С# на мой взгляд, тупиковая ветвь. она приведёт лишь к тому, что вырастет поколение программистов не знающих элементарных азов работы с процессором, и на 100 % зависящих от Microsoft в правах доступа к портам ввода-вывода.
-
1. Я занимаюсь кросплатформенными приложениями т.к. устройства моего работодателя должны работать на трех основных ОС Windows, Linux и MacOS. Я бы стрельнулся делать это на чем то отличным от Java, хотя признаю проблемы были (особенно с MacOS). Разработку ПО для контроллера вел на C (как и драйвера). 2. У C# и Java есть своя ниша - и она не низкоуровневое программирование. "Лес рубят топором, а бреются бритвой". Поэтому флудить по поводу надо или не надо я не буду.
|