Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.14;
Скачать: CL | DM;

Вниз

Dll и TThread   Найти похожие ветки 

 
Reindeer Moss Eater ©   (2004-10-29 11:11) [40]

почему тогда это код в апликухе работает?

Потому что там работает другой код


 
dms_main ©   (2004-10-29 11:11) [41]


> это даже скомпилировано быть не может

делфа у меня (5 и 7) кривые - компилят кривой код.... :-)))


 
dms_main ©   (2004-10-29 11:12) [42]


> Потому что там работает другой код

как это понимать?


 
Reindeer Moss Eater ©   (2004-10-29 11:15) [43]

Слева направо


 
dms_main ©   (2004-10-29 11:17) [44]

Воощем тут все ясно ......
все ушли от темы - помочь в итоге никто не в состоянии .....


 
Reindeer Moss Eater ©   (2004-10-29 11:18) [45]

Иногда и медицина бессильна


 
Digitman ©   (2004-10-29 11:20) [46]


> делфа у меня (5 и 7) кривые - компилят кривой код


дурью маешься, да ?
при чем здесь версия Делфи ? ты прявила Паскаля нарушил !

procedure TMythread.execute;
begin
     assignfile(list,drive+".txt");
     rewrite(list);
     FindFile(drive+":\round.txt");
     closefile(list);
     checkList:=TStringList.Create;
     checklist.Duplicates:=dupIgnore;
     checklist.Sorted:=true;
     checkList.LoadFromFile(drive+".txt");
     checklist.SaveToFile(drive+".txt");
     checklist.Clear;
     parseFile(drive+".txt");
end;
 mycountsection:=TcriticalSection.Create;
 mycountsection.Enter;
 try
 threadcount:=threadcount-1;
 finally
 mycountsection.Leave;
 mycountsection.Free;
 end;
end;


то что подчеркнуто, это к чему относится ?
тело процедуры Execute - это то что между begin..end у тебя, а следом что за галиматься идет, скажи на милость ?


 
sniknik ©   (2004-10-29 11:21) [47]

> как это понимать?
ты не то показываеш, хочеш чтобы по 18й строке нашли глюк в 17й. а то что показываеш нельзя назвать кодом, это один сплошной глюк, не скомпилится.
либо здесь урезано так что принимает другой вид.


 
sniknik ©   (2004-10-29 11:23) [48]

> Иногда и медицина бессильна
ага, и тогда больной выживает. ;о)) (в смысле глюк, в этом случае)


 
dms_main ©   (2004-10-29 14:44) [49]

Хорошо - мы пойдем другим путем - если руки у меня кривые, то подскажите где именно:

library finer_lib;

uses
 SysUtils,windows,
 Classes;

type TMyThread = class (TThread)
a:integer;
b:integer;
c:integer;
constructor create(a0,b0:integer);
destructor free;
procedure execute;override;
end;

constructor TMyThread.create(a0,b0:integer);
begin
   inherited create(false);
   a:=a0;
   b:=b0;
   FreeOnTerminate:=true;
end;

destructor TMyThread.free;
begin
   inherited free;
end;

procedure TMyThread.execute;
var
t:TstringList;
begin
  c:=a*b;
  t:=TStringList.Create;
  t.Add("Result = "+inttostr(c));
  t.SaveToFile("c:\result.nfo");
  t.Free;
end;

{$R *.RES}
var
thread:TMyThread;
begin
thread:=TMyThread.create(2,2);
thread.WaitFor;
end.

Execute попрежнему не вызывается.....


 
dms_main ©   (2004-10-29 14:46) [50]

загрузка dll-ки :

program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils,
 windows;
begin
 readln;
 LoadLibrary("finer_lib.dll");
 readln;
end.


 
Reindeer Moss Eater ©   (2004-10-29 14:48) [51]

Зашибись!

А где запуск чего либо из DLL?


 
Reindeer Moss Eater ©   (2004-10-29 14:50) [52]

Reindeer Moss Eater ©   (29.10.04 10:14) [4]
Или вообще не создан экземпляр


 
dms_main ©   (2004-10-29 14:51) [53]

а зачем после загрузки сразу выполняется begin...end.

begin
thread:=TMyThread.create(2,2);
thread.WaitFor;
end.

Можешь проверить.....


 
dms_main ©   (2004-10-29 14:52) [54]


> Reindeer Moss Eater ©   (29.10.04 10:14) [4]
> Или вообще не создан экземпляр

создается - проверено дэбагом....


 
Reindeer Moss Eater ©   (2004-10-29 14:52) [55]

Можешь проверить.....

Для начала надо проверить результат LoadLibrary


 
dms_main ©   (2004-10-29 14:54) [56]

возвращает хэндл....


 
Reindeer Moss Eater ©   (2004-10-29 14:59) [57]

Код между бегин енд выполнятеся при загрузке процессом.
А выполняется ли он если библиотека грузится вторичным потоком этого процесса?


 
dms_main ©   (2004-10-29 15:02) [58]

Судя по тому что здесь>
inherited create(false);
  a:=a0;
  b:=b0;
  FreeOnTerminate:=true;
брэкпоинты - и на них выполнение останавливается, то грузит...


 
Reindeer Moss Eater ©   (2004-10-29 15:05) [59]

Поток грузит библиотеку. И Хендл валидный.

Но это вторичный поток и я не уверен, что в этом случае выполняется код между бегин и енд.
Надо поднимать литературу.


 
dms_main ©   (2004-10-29 15:07) [60]

так бы и сразу - а то "руки кривые","медицина бессильна".... :-(
подскажите хоть в каком направлении копать.


 
Reindeer Moss Eater ©   (2004-10-29 15:09) [61]

Экспортируй функцию из DLL и вызывай её явно, а не полагайся на Windows


 
dms_main ©   (2004-10-29 15:11) [62]

щас попробую..


 
Digitman ©   (2004-10-29 15:17) [63]


> dms_main


цитирую тебя :

constructor TMyThread.create(a0,b0:integer);
begin
  inherited create(false);
  a:=a0;
  b:=b0;
  FreeOnTerminate:=true;
end;

какого шута ты делаешь
inherited create(false);

!?

ведь доп.поток при этом начинает работать практически немедленно !

на основании чего ты уверен, что строка в конструкторе

   a:=a0;

выполнится заведомо раньше, чем строка

 c:=a*b;

в теле Execute ?

мозжечком-то пошевели малясь !


 
Reindeer Moss Eater ©   (2004-10-29 15:20) [64]

Все проще оказалось.

Код между бегин-енд в модуле библиотеки вызывается один раз на весь процесс.


 
dms_main ©   (2004-10-29 15:23) [65]


> на основании чего ты уверен, что строка в конструкторе

на основании того что execute вызывается ПОСЛЕ create
кстати от темы опять уходим.....


> Все проще оказалось.
>
> Код между бегин-енд в модуле библиотеки вызывается один
> раз на весь процесс.

и что из этого следует???


 
Reindeer Moss Eater ©   (2004-10-29 15:25) [66]

и что из этого следует???

То, что кто-то до сих пор с ручника не снялся.


 
dms_main ©   (2004-10-29 15:26) [67]


library finer_lib;

uses
 SysUtils,windows,
 Classes;

type TMyThread = class (TThread)
a:integer;
b:integer;
c:integer;
constructor create(a0,b0:integer);
destructor free;
procedure execute;override;
end;

constructor TMyThread.create(a0,b0:integer);
begin
   inherited create(false);
   a:=a0;
   b:=b0;
   FreeOnTerminate:=true;
end;

destructor TMyThread.free;
begin
   inherited free;
end;

procedure TMyThread.execute;
var
t:TstringList;
begin
  c:=a*b;
  t:=TStringList.Create;
  t.Add("Result = "+inttostr(c));
  t.SaveToFile("c:\result.nfo");
  t.Free;
end;

{$R *.RES}
procedure run;stdcall;export;
var
thread:TMyThread;
begin
thread:=TMyThread.create(2,2);
thread.WaitFor;
end;
exports run;
begin
end.

program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils,
 windows;
var
run : procedure;
handle:THandle;
begin
 readln;
 @run:=nil;
 handle:=LoadLibrary("finer_lib.dll");
 if  handle>= 32 then
       begin
       @run:=GetProcAddress(Handle,"run");
        if @run <> nil then
       run; ;
        end;
 FreeLibrary(Handle);
 writeln("ok");
 readln;
 readln;
end.



Всем спасибо - все заработало, но всетаки интересен вопрос
- реально ли запустить этот трэд в begin..end библиотеки???


 
dms_main ©   (2004-10-29 15:27) [68]


> Reindeer Moss Eater ©   (29.10.04 15:25) [66]
> и что из этого следует???
>
> То, что кто-то до сих пор с ручника не снялся.

весь день на нервах , так что уж извиняйте.... :-)


 
Reindeer Moss Eater ©   (2004-10-29 15:28) [69]

Реально.
Один раз за все время существования процесса.


 
Digitman ©   (2004-10-29 15:31) [70]


> все заработало


да не будет это работать как положено !
см. [63]


> реально ли запустить этот трэд в begin..end библиотеки


запустить любой код реально !
только вот будет ли он (конкретный твой код) делать то, что от него ожидается - это еще бабушка надвое сказала ...


 
dms_main ©   (2004-10-29 15:32) [71]


> То, что кто-то до сих пор с ручника не снялся.

- это точно......
Может объясните????
мне собственно и надо 1 раз , а не 2 и не 10.....
как заставить это работать без экспорта?


 
dms_main ©   (2004-10-29 15:33) [72]


> да не будет это работать как положено !
> см. [63]

с экспортом уже работает...


 
Reindeer Moss Eater ©   (2004-10-29 15:34) [73]

как заставить это работать без экспорта?

Чё, пошлины экспортные давят?


 
dms_main ©   (2004-10-29 15:35) [74]


> Чё, пошлины экспортные давят?

ага причем сильно..... :-))


 
Reindeer Moss Eater ©   (2004-10-29 15:37) [75]

Все это напоминает ток-шоу с приглашенными актерами.
Но актеры эти приглашенные, надо отдать должное здешним спецам по кастингу, иногда просто гениальные попадаются.
Именно гениальные. Снимаю шляпу.


 
dms_main ©   (2004-10-29 15:39) [76]

А если серьезно?


 
Reindeer Moss Eater ©   (2004-10-29 15:39) [77]

Так ведь работает уже


 
Digitman ©   (2004-10-29 15:40) [78]

просто вызови конструктор трэда в теле begin..end библиотеки.
что этому мешает ?


 
dms_main ©   (2004-10-29 15:41) [79]


> Так ведь работает уже

с экспортом - да ,а без экспорта - нет.
Я и спросил можно ли без экспорта и если да - то как.


 
dms_main ©   (2004-10-29 15:42) [80]


> просто вызови конструктор трэда в теле begin..end библиотеки.
> что этому мешает ?

А я что сделал?

begin
thread:=TMyThread.create(2,2);
thread.WaitFor;
end.



Страницы: 1 2 3 4 5 вся ветка

Текущий архив: 2004.11.14;
Скачать: CL | DM;

Наверх




Память: 0.63 MB
Время: 0.054 c
3-1097587001
S@shka
2004-10-12 17:16
2004.11.14
Запрос на выборку


10-1063214222
hilton
2003-09-10 21:17
2004.11.14
Передача интерфейса _Recordset через SocketConnection


14-1098557901
gn
2004-10-23 22:58
2004.11.14
Драма "альтернативных" браузеров


3-1097562310
mr.Faga
2004-10-12 10:25
2004.11.14
Как вернуть назад QuickReport?


1-1099075284
BlackLord2003
2004-10-29 22:41
2004.11.14
TBX