Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Мьютексы в потоке [D7, WinXP]


Страницы:   1 2 3

Sam Stone ©   (2006-06-28 22:25:00) 

Доброго времени суток.
Как создать мьютекс в потоке (TThread) так, чтобы потом в основном потоке программы можно было проверить создан он или нет? Просто CreateMutex с тем же именем ни к чему не приводит :(


Sam Stone   (2006-06-29 00:26:00) [1]

Еще раз спасибо )

ЗЫ
пошел в яндекс - нашел вот это: http://www.delphimaster.ru/cgi-bin/nuts.pl?showpage=6:)))


Eraser   (2006-06-29 00:21:00) [2]

> [42] Sam Stone ©   (29.06.06 00:20)


> поищу книгу

тут есть http://rouse.front.ru/


Sam Stone   (2006-06-29 00:20:00) [3]

Что ж, спасибо, поищу книгу, попробую осилить ;-) Спасибо )


Eraser   (2006-06-29 00:16:00) [4]

> [39] Sam Stone ©   (29.06.06 00:14)


> Основной поток не видит мьютексы в "доп" потоках?

видит, ну лучше почитать Рихтера, там все очень понятно и на примерох разьясняется, такие вопросы отпадут сами собой.

> Я пойду учить потоки

вот с этого и надо было начинать :)


Eraser   (2006-06-29 00:14:00) [5]

> Ну туда можно, например, Application.processmessages сунуть


 while not q.terminated do
 begin
   Application.ProcessMessages;
   Sleep(1);
 end;
 q.Free;
 halt;

ну что ж.. можно конечно, но как-то не очень.


Sam Stone   (2006-06-29 00:14:00) [6]

> Eraser ©   (29.06.06 00:10) [38]
абсолютно не причем. Вот кольнуло мне. А теперь интесно - в чем именно косяк. Основной поток не видит мьютексы в "доп" потоках? Если не хотите отвечать можно свернуть разговор. Я пойду учить потоки и радоваться WaitFor'ру.


Eraser   (2006-06-29 00:10:00) [7]

> [37] Sam Stone ©   (29.06.06 00:08)

да при чем тут вообще мьютексы? дескриптор потока сам по себе может выступать объектом синхронизации!


Sam Stone   (2006-06-29 00:08:00) [8]

> Fay ©   (29.06.06 00:05) [33]
Правильно, зациклились. Почему тогда программа завершилась СРАЗУ же по halt? Для "правильности" можно в конце работы потока ReleaseMutex добавить.


Fay   (2006-06-29 00:08:00) [9]

2 Sam Stone ©   (29.06.06 0:05) [34]
> Application.processmessages сунуть, чтоб и проц не отъедало
Ложитесь спать


Eraser   (2006-06-29 00:07:00) [10]

> [32] Sam Stone ©   (29.06.06 00:03)


> задача - подождать пока отработает код в потоке(не я его
> туда заносил и вынимать не надо) и после зарубить программу.

если программа не консольная, все таки не очень хорошо, если она будет подвисать на довольно большой промежуток времени, поэтому советую работать с доп. потоком асинхронно, а не дожидаться его завершения, усыпляя основной поток.


Sam Stone   (2006-06-29 00:05:00) [11]

> Eraser ©   (29.06.06 00:01) [31]
Ну туда можно, например, Application.processmessages сунуть, чтоб и проц не отъедало от выполнения основной задачи, и окно программы не "зависало".


Fay   (2006-06-29 00:05:00) [12]

2 Leonid Troyanovsky ©   (28.06.06 23:58) [28]
ОК, понял

2 Sam Stone ©   (28.06.06 23:57) [27]
Перефразируем.

купить_бутылку_водки(0.75, 40, 'Смирнофф');
...
купить_бутылку_водки(0.5, 40, 'Смирнофф');
while ПроверитьХолодильник() = ВОДКА_УЖЕ_ЕСТЬ do
 купить_бутылку_водки(0.5, 40, 'Смирнофф');

Денюшек может не хватить


Sam Stone   (2006-06-29 00:03:00) [13]

> Eraser ©   (28.06.06 23:59) [29]
задача - подождать пока отработает код в потоке(не я его туда заносил и вынимать не надо) и после зарубить программу. Честно говоря, про WaitFor не знал :(
Просто попробовал "пощупать" мьютексы, заинтересовало в чем косяк.


Eraser   (2006-06-29 00:01:00) [14]

> [20] Sam Stone ©   (28.06.06 23:44)

в том, что:
1. убого.
2. скорее всего будет кушать 99.5% процессорного времени.


Sam Stone   (2006-06-29 00:00:00) [15]

Тьфу, не дописал...
> Eraser ©   (28.06.06 23:50) [26]
>> [20] Sam Stone ©   (28.06.06 23:44)
> вот сразу бы так и сказал ))


Собсно интересует в чем НЕработоспособность [20].


Eraser   (2006-06-28 23:59:00) [16]

> [27] Sam Stone ©   (28.06.06 23:57)


> q.WaitFor, как я понимаю, вместо дури While GetLastError...
> ?

именно, хотя и делает бесполезным использование доп. потока.

> Не понял насмешки. Перед while еще один createmutex, GetLastError
> будет с него начинать. Или я не прав?

какая конкретно задача?


Leonid Troyanovsky   (2006-06-28 23:58:00) [17]


> Fay ©   (28.06.06 23:46) [22]

> Никто не мешает дубликату быть глобальной переменной 8))


Если все поткоки разрабатывались в рамках одного приложения,
то, проблем, видимо, быть не должно (в смысле организации
хранения валидной ссылки).

Однако, в любом случае, если некоему потоку удалось
DuplicateHandle, то, далее, он может быть спокоен относительно
дальнйших планов всех остальных.

--
Regards, LVT.


Sam Stone   (2006-06-28 23:57:00) [18]

> Eraser ©   (28.06.06 23:50) [26]
q.WaitFor, как я понимаю, вместо дури While GetLastError... ?

> Fay ©   (28.06.06 23:50) [24]
Не понял насмешки. Перед while еще один createmutex, GetLastError будет с него начинать. Или я не прав?


Fay   (2006-06-28 23:50:00) [19]

2 Sam Stone ©   (28.06.06 23:44) [20]
Terminate в TMythead.execute явно лишний

while GetLastError=ERROR_ALREADY_EXISTS do
    CreateMutex(nil,true,'aaa');

LOL

Спокойной ночи 8)


Sam Stone   (2006-06-28 23:50:00) [20]

>Eraser ©   (28.06.06 23:48) [23]
см [20]


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо