![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мьютексы в потоке [D7, WinXP]
Sam Stone © (2006-06-28 22:25:00)Доброго времени суток.
Как создать мьютекс в потоке (TThread) так, чтобы потом в основном потоке программы можно было проверить создан он или нет? Просто CreateMutex с тем же именем ни к чему не приводит :(
Fay (2006-06-28 22:57:00) [41]2 Sam Stone © (28.06.06 22:37) [2]
function Jopa(Parameter : Pointer) : Integer;
begin
CreateMutex(nil, True, 'JOPA');
end;
procedure TForm1.Button1Click(Sender : TObject);
var
dw : DWORD;
begin
CloseHandle(BeginThread(nil, 0, Jopa, nil, 0, dw));
Sleep(100);
CreateMutex(nil, True, 'JOPA');
RaiseLastOSError;
end;
Leonid Troyanovsky (2006-06-28 22:50:00) [42]
> Sam Stone © (28.06.06 22:25)
> Как создать мьютекс в потоке (TThread) так, чтобы потом
> в основном потоке программы можно было проверить создан
> он или нет?
Попробую описать решение проблемы так, как она обычно
встречается в жизни. Т.е., основной поток создает мьютекс
и передает его хендл вторичному. В этом случае, у вторичного
потока нет нужды сомневаться в валидности оного.
Ну, а если нужда возникла, то у него есть еще в запасе
DuplicateHandle.
С другой стороны, что-то мне подсказывает, что на месте
мьютекса мог быть и Event (CreateEvent).
--
Regards, LVT.
Sam Stone (2006-06-28 22:37:00) [43]Если повторно создать мьютекс с тем же именем GetLastError вернет ошибку ERROR_ALREADY_EXISTS. Этого не происходит.
Fay (2006-06-28 22:26:00) [44]> Просто CreateMutex с тем же именем ни к чему не приводит :(
В смысле? К чему не приводит?