Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];
ВнизИмеется поток,в нем инициализирую и запускаю еше один ... Найти похожие ветки
← →
Tommy (2004-02-19 10:51) [0]Доброе утро всем!
Вот такая проблемма возникла...
Имеется поток TClientThread
в нем инициализирую и запускаю еше один и жду его окончания,выдает ошибку (на греческом так как греческии) Thread Error : Error Index(6)
В чем может быть дело...помогите кто может!
← →
Тимохов (2004-02-19 10:54) [1]код
← →
Tommy (2004-02-19 11:14) [2]function TSendThread.PutInfoToLocalBuffer(LocalValues:string; LocalBuffer:byte):boolean;
begin
BufferThread:=TBufferThread.Create(LocalBuffer,1,"");
BufferThread.WaitFor;
...
end;
//other module
type
TBufferThread = class(TThread)
private
Call_Type:byte; //this is type of call
// 1 ->
// 2 ->
// 3 ->
// 4 ->
// 5 ->
// 6 ->
// 7 ->
Update_Type:byte;
Update_Data:string;
PrintString:string; //the result of running the thread...
function Retry_BUFFER:string;
function Retry_InparkBuffer:string;
function Retry_ChargesBuffer:string;
function Retry_EntryBuffer:string;
function Retry_AllChangesBuffer:string;
procedure MyMessage;
{ Private declarations }
protected
procedure Execute; override;
public
constructor Create(PR_Call_Type,PR_Update_Type:byte; PR_Update_Data:string);
end;
constructor TBufferThread.Create(PR_Call_Type,PR_Update_Type:byte; PR_Update_Data:string);
begin
inherited create(true);
Call_Type:=PR_Call_Type; //1 if SENDBUFFER
Update_Type:=PR_Update_Type;
Update_Data:=PR_Update_Data;
FreeOnTerminate:=true;
Resume;
end;
procedure TBufferThread.Execute;
begin
Case Call_Type of
1: Buffer_Thread_Resu[Call_Type,Update_Type] :=Retry_BUFFER;
...
end;
end;
function TBufferThread.Retry_BUFFER:string;
begin
//работаю с массиввами
end
← →
Тимохов (2004-02-19 11:27) [3]Информации маловато... :(((
Что такое Buffer_Thread_Resu?
← →
Владислав (2004-02-19 11:33) [4]Это похоже вот на что: The handle is invalid.
← →
Владислав (2004-02-19 11:37) [5]Могу ошибаться, но одна из возможных причин:
begin
BufferThread:=TBufferThread.Create(LocalBuffer,1,"");
BufferThread.WaitFor; //Здесь ждем хендла потока
...
end;
constructor TBufferThread.Create(PR_Call_Type,PR_Update_Type:byte; PR_Update_Data:string);
begin
inherited create(true);
Call_Type:=PR_Call_Type; //1 if SENDBUFFER
Update_Type:=PR_Update_Type;
Update_Data:=PR_Update_Data;
FreeOnTerminate:=true; // А здесь мы его прибиваем
Resume;
end;
← →
Тимохов (2004-02-19 11:41) [6]
> Владислав © (19.02.04 11:37) [5]
Ошибаетесь.
Кого "прибиваем"? Поток еще работать не начал...
Автору - нужно больше информации.
← →
Владислав (2004-02-19 11:51) [7]> Тимохов © (19.02.04 11:41) [6]
Читай подтекстом. Посмотри в код класса в методы WaitFor и в ту часть, в которую потоковая функция попадает после выхода из метода Execute. Что называется, зри в корень.
Ну а причины еще могут быть. Вот автор расскажет, в каком месте ошибка. Меня натолкнула фраза "и жду его окончания,выдает ошибку".
Так что, уважаемый Дмитрий, не торопитесь с выводами ;)
← →
Тимохов (2004-02-19 11:52) [8]В общем, как обычно
> нужно больше информации.
← →
Tommy (2004-02-19 12:48) [9]ок вся проблемма была именно в ...
FreeOnTerminate:=true
...спасибо большое за помощ!!!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.03.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.006 c