Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.10;
Скачать: CL | DM;

Вниз

Остановка потока   Найти похожие ветки 

 
Malik   (2008-01-17 00:40) [0]

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


 
_Mike_   (2008-01-17 02:31) [1]

CreateEvent, SetEvent, WaitForSingleObject + F1


 
MetalFan ©   (2008-01-17 09:12) [2]


> CreateEvent, SetEvent, WaitForSingleObject + F1

либо TEvent + F1


 
Сергей М. ©   (2008-01-17 10:00) [3]


> что бы потом потом привостановлении его управление начинало
> не с опять же этой точки, а со следущей


Это еще надо сильно постараться, чтобы умудриться сделать "с опять же этой точки")


 
Malik   (2008-01-17 13:53) [4]


> Это еще надо сильно постараться, чтобы умудриться сделать
> "с опять же этой точки")

Да долгго думать не надо:

в потоке:
...
MyThread.Suspende;
...
потом из левого потока:
...
MyThread.Resume;
...


 
oxffff ©   (2008-01-17 14:28) [5]


> MyThread.Suspende;


СуспендЕ, Джамшут.


 
Malik   (2008-01-17 14:34) [6]

какая разница... тут не о орфографии речь идет!!!


 
Malik   (2008-01-17 14:43) [7]

тут в мое случаи скорее всего надо использовать WaitForMultipleObjects
Но только понять не могу, что за 2-ой параметр этой ф-ии???
Вроде делаю так:
...
Events: array of TEvent;
...
WaitForMultipleObjects(Length(Events), @Events, TRUE, INFINITE);
...
Но она сигнализирует раньше времени... Сомнения у меня насчет 2-ого параметра, то ли я туда "воткнул"???


 
oxffff ©   (2008-01-17 15:22) [8]


> Но она сигнализирует раньше времени... Сомнения у меня насчет
> 2-ого параметра, то ли я туда "воткнул"???


WaitForMultipleObjects(Length(Events), @Events[0], TRUE, INFINITE);


 
Malik ©   (2008-01-17 15:42) [9]


> WaitForMultipleObjects(Length(Events), @Events[0], TRUE,
>  INFINITE);

Если я правильно понимаю, то управление передасться следующей точке, только после срабатывание ВСЕХ Events из массива?


 
oxffff ©   (2008-01-17 16:01) [10]


> Malik ©   (17.01.08 15:42) [9]


После перехода всех объектов синхронизации в сигнальное состояние.


 
Malik ©   (2008-01-17 18:53) [11]

Я специально этот вопрос задал))) Так как ваш предложенный вариант действенен только когда тип Events - THandel, а в конкретном случаи Events - TEvent.


 
oxffff ©   (2008-01-17 19:37) [12]


> 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);


 
DiamondShark ©   (2008-01-17 19:53) [13]

феерично.


 
_Mike_   (2008-01-18 00:58) [14]


> Events: array of TEvent;
> ...
> WaitForMultipleObjects(Length(Events), @Events, TRUE, INFINITE);
>

Оригинально. А почитать описание функции?

первый параметр - количество элементов в массиве.
второй параметр - массив описателей объекта ядра Event - нафига туда передавать указатель на массив указателей - загадка.
Третий параметр - если True - то функция ждет завершение ВСЕХ событий, если False - одного любого
четвертый - соответственно тайм-аут


 
oxffff ©   (2008-01-18 08:10) [15]


> второй параметр - массив описателей объекта ядра Event -
>  нафига туда передавать указатель на массив указателей -
>  загадка.


@Events
Для особо умных - это двойной указатель на массив.


 
oxffff ©   (2008-01-18 08:11) [16]


> oxffff ©   (18.01.08 08:10) [15]
>
> > второй параметр - массив описателей объекта ядра Event
> -
> >  нафига туда передавать указатель на массив указателей
> -
> >  загадка.
>
>
> @Events
> Для особо умных - это двойной указатель на массив.


это двойной указатель на массив указателей


 
Сергей М. ©   (2008-01-18 08:28) [17]


> Malik   (17.01.08 13:53) [4]


И что ?

По твоим утверждениям, как только "левый поток" вызовет Resume, то выполнение "правого" потока, приостановившего себя вызовом Suspend (чем не "точка" ?), тут же вновь начнет выполнять Suspend (т.е. с той же "точки"), вместо того чтобы продолжить выполнение операторов, следующих за Suspend.

А это полная ерунда)



Страницы: 1 вся ветка

Текущий архив: 2008.02.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.024 c
2-1200670447
Daskel
2008-01-18 18:34
2008.02.10
Отправка строки по сети


15-1199969784
Вссм
2008-01-10 15:56
2008.02.10
virtual server 2005


2-1200570820
Farel
2008-01-17 14:53
2008.02.10
DbGrid


15-1199381330
Труп Васи Доброго
2008-01-03 20:28
2008.02.10
Займите 350 wmr


2-1200115481
Voya)
2008-01-12 08:24
2008.02.10
Загрузочная флешка