![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как в DLL организовать таймер, или вывернутся другим способом [D5, WinXP]
user51 © (2010-05-31 11:19:00)как в DLL организовать таймер, или вывернуться другим способом.
dll ведет логи некоторых событий открывает файл пишет закрывает. И случается ситуация что события идут очень быстро
и до того как файл закроется, необходимо записать еще в него,
сотоветсвенно возникает ошибка. Отловить ее могу, как запустить повторно процесс запись например через пару секунд.
Второй вопрос как организовать таймер - выполнять дествия через промежуток времени
sniknik (2010-06-01 12:31:00) [1]> помогите человеку если можете.
какая разница могу или не могу? хочу или не хочу вот в чем вопрос... особенно за "Б О Л Ь Ш О Е С П А С И Б О".
> Ответь на вопросы, а то из твоих сообщений ничего не понятно. Вообще.
он не может. он своим "гнутьем пальцев" загнал себя в угол, и сейчас, что бы не сказал будет противоречить сказанному ранее.
> это ответ на заданный вопрос
это очень грустно... таймаут как самоцель. я бы считал ответом решение по устранению от ошибки изза которой закрутилась вся эта "бодяга".
Демо (2010-06-01 12:31:00) [2]
> это то что нужно было
Я бы сказал - жуть.
user51 (2010-06-01 12:26:00) [3]12 © СПАСИБО
это то что нужно было
procedure MMM;
begin
ShowMessage('MMM');
end;
function Text:integer; stdcall;
var
t:tTimer;
MyEvnt : TMethod;
begin
MyEvnt.Code := @MMM;
MyEvnt.Data := nil;
t := tTimer.Create(nil);
t.Enabled := false;
t.Interval := 9000;
t.OnTimer := TNotifyEvent(MyEvnt);
t.Enabled := true;
result := 0;
end;
это ответ на заданный вопрос
Демо (2010-06-01 12:01:00) [4]
> из проги вызовите любую процедуру и запишите через 5 сек
> лог
Почему через 5 сек., а не через 10?
Как организовано взаимодействие основного приложения и DLL?
Ответь на вопросы, а то из твоих сообщений ничего не понятно. Вообще.
user51 (2010-06-01 11:46:00) [5]sniknik
сделайте так
Напишите простую прогу и простую длл
из проги вызовите любую процедуру и запишите через 5 сек лог что процедура была вызвана причем эти 5 секунд длл должна работать а не тупо ждать 5 секунд.
и я ВАМ скажу Б О Л Ь Ш О Е С П А С И Б О.
помогите человеку если можете.
12 (2010-06-01 11:45:00) [6]с фига не рабочими?
вот тока что накидал
var
Form1: TForm1;
MMM : function:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
LibHandle : tHandle;
begin
@MMM := nil;
LibHandle := LoadLibrary('DLL1.DLL');
if LibHandle >= 32 then begin
@MMM := GetProcAddress(LibHandle,'Text');
if @MMM <> nil
then MMM
else showmessage('');
procedure MMM;
begin
ShowMessage('MMM');
end;
function Text:integer; stdcall;
var
t:tTimer;
MyEvnt : TMethod;
begin
MyEvnt.Code := @MMM;
MyEvnt.Data := nil;
t := tTimer.Create(nil);
t.Enabled := false;
t.Interval := 9000;
t.OnTimer := TNotifyEvent(MyEvnt);
t.Enabled := true;
result := 0;
end;
exports Text;
{$R *.res}
begin
end.
----------------------------
> dll - полный законченный програмный продукт, кроме нее
> никаких програм нет и не нужно. Просто наверно вы незнаете
> что может быть и так.
кто еще кроме вас так считает?
sniknik (2010-06-01 11:41:00) [7]> однобоко мыслите ;)
ну так расширил бы наше мышление, рассказал как оно само по себе работает и что делает.
p.s. всегда удивляло как люди "гнущие пальцы" о том, что делают крутейшие вещи могут спрашивать о настолько элементарных "проблемах".
sniknik (2010-06-01 11:38:00) [8]> Пока все советы были теоретическими и нерабочими.
теоретическими да, т.к. никто не бросился тебе код писать, но нерабочими? посты про потоки успешно проигнорированы? и + "случилась" смена приоритетов... от необходимости задержки из-за ошибки (сомнительной необходимости кстати) вместо устранения этой ошибки, теперь задержка стала самоцелью...
user51 (2010-06-01 11:36:00) [9]Этот проект уже работает. в IE она не внедряется. Состав проекта - единственная dll. для его работы дополнительно ничего не требуется даже IE. У dll есть задача она ее выполняет. Проблема с записью логов нарисовалось, если отключть логи вообще она работать хуже не будет. Когда отлажу полностью установлю еще на 100 компов - у меня их около 200.
>это внедрение в IE для разных противоправных действий... больше отдельно стоящая dll никаких ассоциаций не вызывает
однобоко мыслите ;)
лучше подсказали бы насчет задержки
Anatoly Podgoretsky (2010-06-01 11:22:00) [10]> user51 (01.06.2010 11:11:32) [32]
dll - не законченный програмный продукт по определению, для использование
нужен еще один программный продукт.
sniknik (2010-06-01 11:20:00) [11]> Просто наверно вы незнаете что может быть и так.
единственное применение того чего я "не знаю, что может быть и так" это внедрение в IE для разных противоправных действий... больше отдельно стоящая dll никаких ассоциаций не вызывает (при условии, что это не COM/ActivX объект, а именно dll).
user51 (2010-06-01 11:11:00) [12]Почитал другие форумы, похоже сделать задержку (таймер) без формы не совсем просто как кажется. Пока все советы были теоретическими и нерабочими. Можете проверить. Напишите простую прогу и простую длл
из проги вызовите любую процедуру и запишите через 5 сек лог что процедура была вызвана причем эти 5 секунд длл должна работать а не тупо ждать 5 секунд.
>как как... да как всегда здесь, в "одно рыло" т.е. скорее всего это будет >просто разделение одной программы на 2/? части. совершенно не нужное, >чисто из личных "бзиков" автора... пока еще до него дойдет, что оформив это >в простой модуль, получишь более простое и удобное решение. (он конечно >будет это отрицать, и говорить, что пишет одну dll для кучи программ на куче >языков)
dll - полный законченный програмный продукт, кроме нее никаких програм нет и не нужно. Просто наверно вы незнаете что может быть и так. Установил на десяток компов в пятницу, пишет логи только пока с пропусками ;).
sniknik (2010-06-01 09:40:00) [13]> зато вполне возможно нужна синхронизация процессов.
если про авторское решение из ветки, то наверное да... но тогда, я говорил про себя, про принцип в программе, цельной программе, как обычно пишу. т.что как то упустил эту возможную нужду.
> как эту длл будут использовать.
как как... да как всегда здесь, в "одно рыло" т.е. скорее всего это будет просто разделение одной программы на 2/? части. совершенно не нужное, чисто из личных "бзиков" автора... пока еще до него дойдет, что оформив это в простой модуль, получишь более простое и удобное решение. (он конечно будет это отрицать, и говорить, что пишет одну dll для кучи программ на куче языков)
Медвежонок Пятачок (2010-06-01 09:03:00) [14]> Нужна синхронизация потоков.
тогда и синхронизация не нужна, и "очередь" сама образуется.
зато вполне возможно нужна синхронизация процессов.
кто там наперед знает, как эту длл будут использовать.
sniknik (2010-06-01 00:06:00) [15]нда, видимо диски стали быстрее... на 100 не видно, по нулям практически (пляшет) если "тики" считать. а вот на 1000 повторов открытие/закрытие без записи (а значит и сброса буфера) 48 тиков в среднем, а с записью 250 тиков на ту же тысячу. (т.е. если 100 против 1 то проиграл, 4,8 против 0,25)
sniknik (2010-05-31 23:40:00) [16]кстати можно "померятся"... 100 открытий/закрытий файла без буфера, чтобы сбрасывать нечего было против одного с парой килобайт...
(не пробовал, чисто теоретически, т.что все честно будет :)
sniknik (2010-05-31 23:36:00) [17]> Закрытие никак не может быть мизером по сравнению с Flush, потому что при закрытии сначала этот самый Flush и происходит.
именно, оно "тяжелое" только из-за этого "довеска".
> выбирает сообщение из очереди, пишет его в лог, сбрасывает буфер лога ( Flush)
а делать его так и так предлагали.
Юрий Зотов (2010-05-31 23:33:00) [18]
> sniknik © (31.05.10 23:31) [24]
Закрытие никак не может быть мизером по сравнению с Flush, потому что при закрытии сначала этот самый Flush и происходит.
sniknik (2010-05-31 23:33:00) [19]> Так что не там ищешь.
как всегда... где угодно, но только не в своем коде/алгоритме. они идеальны.
sniknik (2010-05-31 23:31:00) [20]> -так зачем же еще и переоткрывать файл, тратя на это немалое время, если программа и так не успевает?
открытие/закрытие мизер по сравнению с Flush. т.е. если подымаешь штангу, то бабочка сверху погоды не сделает (не в мультфильме живем).
p.s. сомневаюсь я что то, то программа не успевает из-за закрытия файла. если уж есть время на повтор через пару секунд... это времени на десятки, если не на сотни мегабайт записи.