Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.02.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.057 c
2-1200490770
NaRuTo
2008-01-16 16:39
2008.02.10
Преобразование!


15-1200080391
datorn
2008-01-11 22:39
2008.02.10
Автозагрузка с флешки


15-1198821897
user_
2007-12-28 09:04
2008.02.10
Работь программистом


15-1199317232
Германн
2008-01-03 02:40
2008.02.10
Командировка в Димитровград


2-1200213662
Kotov
2008-01-13 11:41
2008.02.10
Своё приложение вместо bat-файла- Возможно?





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