Текущий архив: 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