Работа с потоками

-=Ogre=-
Дата: 18.10.2006 12:40:16
в модeль поместил новую процедурку
function hprocess: Integer; stdcall; external 'linking32.dll';
Как я понял от автора длл ее нужно периодически вызывать в основном потоке
для того чтобы работал обработчик.Он советует делать ето через
Aplication.onIdle
.Однако при вставке в код сразу после соединения такого кода:
Application.onIdle:=hprocess
Выдает ошибку
EInOutError
.В примере по пользованию этой процедурки (консольный проект)был такой код:
For i:=1 to 100 do begin sleep(1);hprocess;end;
Что с етим можно сделать?
-=Ogre=-
Дата: 18.10.2006 12:45:42
текст моуля и проги тут:[url=http://]sql.ru/forum/actualthread.aspx?tid=351300[/url]
mikolas
Дата: 18.10.2006 14:31:39
-=Ogre=-
Однако при вставке в код сразу после соединения такого кода:
Application.onIdle:=hprocess
Выдает ошибку
EInOutError
.

Не вставляй это в код.
mikolas
Дата: 18.10.2006 14:36:57
попробуй в модуле проекта вставить
{$R *.res}
{$APPTYPE CONSOLE}
Уверен получится.
-=Ogre=-
Дата: 19.10.2006 10:59:29
mikolas
Не вставляй это в код.

допустим я код не вставлю в таком виде но вызывать именно процедуру hprocess мне необходимо!
mikolas
{$R *.res}
{$APPTYPE CONSOLE}

я немного не понял, а для чего устанавливать в консольное приложение и делать что тос файлам(ми) типа .res?Что ето даст?
Barlone
Дата: 19.10.2006 11:16:28
type TIdleEvent = procedure (Sender: TObject; var Done: Boolean) of object;
Ваша hprocess соответствует прототипу ?
-=Ogre=-
Дата: 19.10.2006 11:36:23
Это написали вы:
Barlone
type TIdleEvent = procedure (Sender: TObject; var Done: Boolean) of object;
Ваша hprocess соответствует прототипу ?

Это в начале в 1-м посте написал я:
function hprocess: Integer; stdcall; external 'linking32.dll';
P.S.
Я не понимаю,как реализовать и спрашиваю совета.
Как я понимаю с application.onIdle не получиться, ну дык ткните носом в том направлении где моно примерчик нарыть, где бы процедурка засовывалась в поток...
P.P.S.S
Спасибо всем кто пытается помочь.
Спамеры не пачкайте в посте плз.
lazy cat1
Дата: 19.10.2006 11:51:29
"Угадал все буквы, не смог прочитать слово".
1. Делаешь где-нибудь (в главной форме, например) метод с такими же параметрами, как у TIdleEvent.
2. Внутри этого метода пишешь вызов нужной функции.
3. В нужный момент устанавливаешь Application.OnIdle := <метод, созданный на шаге 1>.

Или еще вариант: для альтернативно одаренных борланды на закладочке "Additional" разместили компонент TApplicationEvents, который сводит вышеуказанную сложнейшую последовательность действий к паре движений мыши.
-=Ogre=-
Дата: 19.10.2006 12:03:34
Спасибо за совет.Хоть кто-то откликнулся.Но я уже нашел пример.
Как выполнить какой-то процесс тогда, когда пользователь не работает с моим приложением?
Постоянная ссылка на статью: [url=http://]http://vingrad.ru/DELPHI-DLP-001198[/url]
Создайте процедуру, которая будет вызываться при событии Application.OnIdle.

Обьявим процедуру:

код Pascal/Delphi
procedure IdleEventHandler(Sender: TObject; var Done: Boolean);

В разделе implementation опишем поцедуру:
код Pascal/Delphi
procedure TForm1.IdleEventHandler(Sender: TObject; var Done: Boolean); 
begin 
{Do a small bit of work here} 
 Done := false; 
end; 
В методе Form'ы OnCreate - укажем что наша процедура вызывается на событии
Application.OnIdle.
код Pascal/Delphi
Application.OnIdle := IdleEventHandler; 

Событие OnIdle возникает один раз - когда приложение переходит в режим "безделья" (idle). Если в обработчике переменной Done присвоить False событие будет вызываться вновь и вновь, до тех пор пока приложение "бездельничает" и переменной Done не присвоенно значение True.