Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
6-66029
I_Sword
2003-09-24 18:29
2003.11.20
MAC адреса компьютеров в локальной сети


14-66091
Сатир
2003-10-29 15:19
2003.11.20
Сегодня на Землю обрушится магнитная буря


4-66168
Alexander
2003-09-24 11:59
2003.11.20
Есть поток, в котором выделены значительные размеры памяти и


3-65778
Ozone
2003-10-30 16:20
2003.11.20
Access + ADO


7-66140
bloodman
2003-09-01 17:13
2003.11.20
Модем и тоновые команды





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