Главная страница
    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.013 c
1-65982
Senator
2003-11-10 17:56
2003.11.20
Работа с PageControl


1-65905
Слэш2
2003-11-08 15:33
2003.11.20
XP manifest и RXlib


14-66059
Gluk_3_Final
2003-10-28 17:06
2003.11.20
Зацените, скоро раздел новый будет


1-65865
VitGun
2003-11-09 13:13
2003.11.20
Редактора экранных форм


1-65867
Condor
2003-11-09 14:22
2003.11.20
Out of system resurses





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