Главная страница
    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.039 c
4-1081323245
juiceman
2004-04-07 11:34
2004.05.30
Как узнать "хуковое") окно ???


14-1083938202
X9
2004-05-07 17:56
2004.05.30
Winternl.h


1-1084536486
Kest
2004-05-14 16:08
2004.05.30
Проблема записи из одного TMemoryStream в другой


3-1083736337
TATIANA
2004-05-05 09:52
2004.05.30
Хранимая процедура - запрос - BLOB - поле


8-1079206208
novi
2004-03-13 22:30
2004.05.30
процедура реагирующая на положение указателя мыши





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