Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.14;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.61 MB
Время: 0.04 c
14-1098703870
vopros
2004-10-25 15:31
2004.11.14
Сегодня иду на Зенит-ЦСКА.Но немножко не посебе.


1-1098857205
sapsi
2004-10-27 10:06
2004.11.14
Прокрутка грида колесиком мыши


1-1099320116
hgd
2004-11-01 17:41
2004.11.14
Подскажите как быть


1-1099285151
Anics
2004-11-01 07:59
2004.11.14
Как отловить действие пользователя "Завершение работы" ?


1-1098894974
td
2004-10-27 20:36
2004.11.14
OLE и потоки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский