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

Вниз

Неверный дискриптор   Найти похожие ветки 

 
TUser ©   (2003-11-10 02:38) [0]

При завершении потока выдается ошибка "Thread error: Неверный дискриптор (6)". В потоке выполняются некие вычисления, что-то сохраняется в файлы, но, вроде бы, никаких слишком "опасных" действий. В чем тут дело?


 
TUser ©   (2003-11-10 10:07) [1]

Неужели только у меня такой глюк выскакивает?


 
Anatoly Podgoretsky ©   (2003-11-10 10:21) [2]

TUser © (10.11.03 02:38)
Тебе тольк кажется.


 
TUser ©   (2003-11-10 10:44) [3]

Так как лечится то? Точнее - в чем может быть причина. Вызывается он примерно так:
MyThread.Proirity, FreeOnTerminate, некоторые public поля, ...
MyThread.Resume;
MyThread.WaitFor;

...

А в Execute прописан вызов нескольких методов, определенных в потоке, которые что-то делают


 
Zergling ©   (2003-11-10 10:52) [4]

TUser © (10.11.03 10:07) [1]

Предположительно обрашаешся к потоку (допустим преостановить/возобновить работу потока), в то время, когда он уже заврешил свою работу или переменая (A: TMyThread) к которой ты обращаешся равна NIL.


 
Zergling ©   (2003-11-10 10:52) [5]

TUser © (10.11.03 10:07) [1]

Предположительно обрашаешся к потоку (допустим преостановить/возобновить работу потока), в то время, когда он уже заврешил свою работу или переменая (A: TMyThread) к которой ты обращаешся равна NIL.


 
TUser ©   (2003-11-10 10:58) [6]

Нет, не обращаюсь.
Ладно, буду копать.


 
panov ©   (2003-11-10 11:13) [7]

Ты же уже знаешь, в какой строке ошибка обычно.


 
TUser ©   (2003-11-10 11:16) [8]

Ошибка ВСЕГДА при завершении потока. Когда Execute закончит выполняться. IDE останавливается на строчке после WaitFor. Но WaitFor здесь убрать нельзя - иначе будет еще хуже.


 
Zergling ©   (2003-11-10 11:17) [9]

TUser ©

Как намекнул panov © (10.11.03 11:13) [7]
Ждем кода.


 
TUser ©   (2003-11-10 11:20) [10]

Кода с собой нету - все дома. Буду сам копать. Но всем спасибо.


 
han_malign ©   (2003-11-10 12:10) [11]

> Но WaitFor здесь убрать нельзя - иначе будет еще хуже.
- было уже на прошлой неделе:
либо FreeOnTerminate,
либо WaitFor; Free;
- вместе нельзя, потому что в вызове WaitFor, опрашивается состояние Handle-а потока(MsgWaitForMultipleObjects/WaitForSingleObject), который, как ты и просил, On Terminate - Free, опрашиваемый Handle - становится Invalid, и WaitForSingleObject(или MsgWaitForMultipleObjects) - соотвественно валится...

function TThread.WaitFor: LongWord;
var
H: array[0..1] of THandle;
WaitResult: Cardinal;
Msg: TMsg;
begin
H[0] := FHandle;
if GetCurrentThreadID = MainThreadID then //наш случай
begin
WaitResult := 0;
H[1] := SyncEvent;
repeat
{ This prevents a potential deadlock if the background thread
does a SendMessage to the foreground thread }
if WaitResult = WAIT_OBJECT_0 + 2 then
PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE);
WaitResult := MsgWaitForMultipleObjects(2, H, False, 1000, QS_SENDMESSAGE);
CheckThreadError(WaitResult <> WAIT_FAILED);
if WaitResult = WAIT_OBJECT_0 + 1 then
CheckSynchronize;
until WaitResult = WAIT_OBJECT_0;
end else WaitForSingleObject(H[0], INFINITE);
CheckThreadError(GetExitCodeThread(H[0], Result));
end;



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

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

Наверх




Память: 0.49 MB
Время: 0.032 c
6-66041
Diatel
2003-09-19 14:42
2003.11.20
Создание IP пакета в


1-65923
Gennadiy
2003-11-01 19:53
2003.11.20
Отправка управляющих команд на принтер!!!


14-66100
servs
2003-10-28 14:47
2003.11.20
чисто академическая задача по алгоритмам


1-65849
A natoly
2003-11-11 13:00
2003.11.20
Люди, помогите сделать ф-ю, вырезки части в строковой переменной


3-65761
France
2003-09-22 19:14
2003.11.20
Как создать базу данных динамически для Interbase6.0 FireBird1.x?