![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Остановка потока [D6, XP]
Malik © (2008-01-17 00:40:00)Незнаю как поток из себя же остановить, но что бы потом потом привостановлении его управление начинало не с опять же этой точки, а со следущей, т.к. в противном случаи он опять же остановиться((
Сергей М. (2008-01-18 08:28:00) [1]
> Malik (17.01.08 13:53) [4]
И что ?
По твоим утверждениям, как только "левый поток" вызовет Resume, то выполнение "правого" потока, приостановившего себя вызовом Suspend (чем не "точка" ?), тут же вновь начнет выполнять Suspend (т.е. с той же "точки"), вместо того чтобы продолжить выполнение операторов, следующих за Suspend.
А это полная ерунда)
oxffff (2008-01-18 08:11:00) [2]
> oxffff © (18.01.08 08:10) [15]
>
> > второй параметр - массив описателей объекта ядра Event
> -
> > нафига туда передавать указатель на массив указателей
> -
> > загадка.
>
>
> @Events
> Для особо умных - это двойной указатель на массив.
это двойной указатель на массив указателей
oxffff (2008-01-18 08:10:00) [3]
> второй параметр - массив описателей объекта ядра Event -
> нафига туда передавать указатель на массив указателей -
> загадка.
@Events
Для особо умных - это двойной указатель на массив.
_Mike_ (2008-01-18 00:58:00) [4]
> Events: array of TEvent;
> ...
> WaitForMultipleObjects(Length(Events), @Events, TRUE, INFINITE);
>
Оригинально. А почитать описание функции?
первый параметр - количество элементов в массиве.
второй параметр - массив описателей объекта ядра Event - нафига туда передавать указатель на массив указателей - загадка.
Третий параметр - если True - то функция ждет завершение ВСЕХ событий, если False - одного любого
четвертый - соответственно тайм-аут
DiamondShark (2008-01-17 19:53:00) [5]феерично.
oxffff (2008-01-17 19:37:00) [6]
> Malik © (17.01.08 18:53) [11]
В твоем случае TEvent это не Handle. А объект.
var Events: array of TEvent;
EventsHandles:array of Thandle;
begin
.......
setlentgh(EventsHandles,length(Events));
for i:=0 to length(Events)-1 do EventsHandles[i]:=Events[i].Handle;
WaitForMultipleObjects(Length(EventsHandles), @EventsHandles[0], TRUE, INFINITE);
Malik (2008-01-17 18:53:00) [7]Я специально этот вопрос задал))) Так как ваш предложенный вариант действенен только когда тип Events - THandel, а в конкретном случаи Events - TEvent.
oxffff (2008-01-17 16:01:00) [8]
> Malik © (17.01.08 15:42) [9]
После перехода всех объектов синхронизации в сигнальное состояние.
Malik (2008-01-17 15:42:00) [9]
> WaitForMultipleObjects(Length(Events), @Events[0], TRUE,
> INFINITE);
Если я правильно понимаю, то управление передасться следующей точке, только после срабатывание ВСЕХ Events из массива?
oxffff (2008-01-17 15:22:00) [10]
> Но она сигнализирует раньше времени... Сомнения у меня насчет
> 2-ого параметра, то ли я туда "воткнул"???
WaitForMultipleObjects(Length(Events), @Events [0], TRUE, INFINITE);
Malik (2008-01-17 14:43:00) [11]тут в мое случаи скорее всего надо использовать WaitForMultipleObjects
Но только понять не могу, что за 2-ой параметр этой ф-ии???
Вроде делаю так:
...
Events: array of TEvent;
...
WaitForMultipleObjects(Length(Events), @Events, TRUE, INFINITE);
...
Но она сигнализирует раньше времени... Сомнения у меня насчет 2-ого параметра, то ли я туда "воткнул"???
Malik (2008-01-17 14:34:00) [12]какая разница... тут не о орфографии речь идет!!!
oxffff (2008-01-17 14:28:00) [13]
> MyThread.Suspende;
СуспендЕ, Джамшут.
Malik (2008-01-17 13:53:00) [14]
> Это еще надо сильно постараться, чтобы умудриться сделать
> "с опять же этой точки")
Да долгго думать не надо:
в потоке:
...
MyThread.Suspende;
...
потом из левого потока:
...
MyThread.Resume;
...
Сергей М. (2008-01-17 10:00:00) [15]
> что бы потом потом привостановлении его управление начинало
> не с опять же этой точки, а со следущей
Это еще надо сильно постараться, чтобы умудриться сделать "с опять же этой точки")
MetalFan (2008-01-17 09:12:00) [16]
> CreateEvent, SetEvent, WaitForSingleObject + F1
либо TEvent + F1
_Mike_ (2008-01-17 02:31:00) [17]CreateEvent, SetEvent, WaitForSingleObject + F1