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

Вниз

передача параметров в поток   Найти похожие ветки 

 
FREEMAN82   (2004-04-20 14:34) [0]

Здравствуйте! Подскажите пожалуйста.Есть функция которую я хочу вызывать в новом потоке с разными параметрами как это реализовать и как получить значение возвращаемое этой функцией.


 
Cobalt ©   (2004-04-20 14:37) [1]

У экземпляра потока есть свойства. Присваивайте ему необходимые значения - и всё будет пучком.
Ес-сно, надо в парамтры функции подставлять эти самые данные из свойств класса потока.


 
Reindeer Moss Eater ©   (2004-04-20 14:46) [2]

procedure TSomeThread.Execute;
begin
case fMode of
 Mode1: SomeMethod1(fSomeField1);
 Mode2: SomeMethod2(fSomeField2,fSomeField3,fSomeField4);
 ...
 ModeN: AnotherMethod;
end;
end;


 
FREEMAN82   (2004-04-20 14:52) [3]

Спасибо Cobalt ©,попробую.


 
freeman82   (2004-04-20 14:54) [4]

procedure TSomeThread.Execute;
begin
case fMode of
Mode1: SomeMethod1(fSomeField1);
Mode2: SomeMethod2(fSomeField2,fSomeField3,fSomeField4);
...
ModeN: AnotherMethod;
end;
end;

при таком подходе вылетает ошибка: значение fSomeField1 "is not component name"


 
Reindeer Moss Eater ©   (2004-04-20 14:59) [5]

А при таком подходе к псевдокоду иначе и быть не может


 
freeman82   (2004-04-20 15:11) [6]

unit uThread;

interface

uses
 Classes,Windows;

type
 TShutdown = class(TThread)

 private
   { Private declarations }

 protected

  procedure Execute; override;
  function shutdown(name,message:string;delay:integer;restart,closeall:boolean):integer;

 end;
var
 message,name:string;
 delay:integer;
 restart,closeall:boolean;

implementation
uses umain;
function Tshutdown.shutdown(name,message:string;delay:integer;restart,closeall:boolean):integer;
var
tkp,tkpo:TTokenPrivileges;
zero:DWORD;
hToken:Thandle;
begin
 Zero:=0;
 if not OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)then
   begin
     messagebox(0,"Exit error","OpenProcessToken fail",MB_OK);
     exit;
   end;

 if not LookupPrivilegeValue(nil,"SeShutdownPrivilege",tkp.Privileges[0].Luid) then
  begin
   messagebox(0,"Exit error","LookupPrivilegeValue fail",MB_OK);
   exit;
  end;
tkp.PrivilegeCount :=1;
tkp.Privileges[0].Attributes :=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(TtokenPrivileges),tkpo,Zero);
If Boolean(GetLastError()) then
 begin
  messagebox(0,"Exit error","AdjustTokenPrivileges fail",MB_OK);
  exit;
 end;
 initiateSystemShutdown (PChar(name),PChar(Message),delay,restart,closeall);
 result:=GetLastError();
end;

procedure TShutdown.Execute;
var
a:integer;
begin
a:=shutdown(name,message,delay,restart,closeall);
end;

end.

unit uMain;
...
proc1:Tshutdown;
.....
name:="comp1";
.....
proc1:=tshutdown.create(false);
здесь вылетаю.


 
Reindeer Moss Eater ©   (2004-04-20 15:19) [7]

А должен залетать?


 
freeman82   (2004-04-20 15:26) [8]

В чем ошибка подскажи пожалуйста


 
Reindeer Moss Eater ©   (2004-04-20 15:31) [9]

Какая ошибка?
Подскажи пожалуйста.


 
freeman82   (2004-04-20 15:48) [10]

нашел ошибку.
а как теперь получить значение функции из потока?


 
Reindeer Moss Eater ©   (2004-04-20 15:50) [11]

Паблик свойству или паблик полю потока присвой его.


 
freeman82   (2004-04-20 15:58) [12]

а можно еще вопросик,как сделать чтобы одновременно было запущенно не более скажем 50 потоков.


 
Reindeer Moss Eater ©   (2004-04-20 16:03) [13]

Не вызывай конструктор потока более чем 50 раз.


 
freeman82   (2004-04-20 16:07) [14]

Если скажем запустили 50 потоков и 20 уже отработали,как узнать, что они отработали и запустиь еще 20?


 
Reindeer Moss Eater ©   (2004-04-20 16:10) [15]

Если есть в приложении форма, или просто окно, то в конце Execute потока посылай этому окну сообщение.
В обработчике сообщения запускай новый поток.


 
freeman82   (2004-04-20 16:13) [16]

Спасибо за ответы!



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.035 c
7-1082851070
fantomas
2004-04-25 03:57
2004.05.30
CRC16


1-1084620383
Кодер
2004-05-15 15:26
2004.05.30
ActiveX


14-1083889805
Думкин
2004-05-07 04:30
2004.05.30
С днем рождения! 7 мая


3-1083653648
SergP
2004-05-04 10:54
2004.05.30
Как добавить поле с постоянным значением в результат запроса?


9-1075006676
Vaso
2004-01-25 07:57
2004.05.30
Canalization





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский