Як правильно поставити процес на паузу?
Є кілька процесів. Одні крутяться безперервно, а інші після однієї ітерації потрібно зупинити до наступного виклику (щоб не жерли процесорний час). причому кілька процесів одночасно можуть вимагати запустити якийсь третій процес.
пробував використовувати suspend resume - але resume ніякого ефекту на зупинений процес не робить.
пробував в процесі після відпрацювання коду викликати suspend (в Execute), а в іншому потоці, коли потрібно запустити знову зупинений процес # XA0; викликати MyProcess.suspend на що отримую помилку про те, що приймач відмовився прийняти # XA0; сигнал (156). Крім того цілком імовірна ситуація коли кілька процесів одночасно спробують оживити третій. Але і викликати MyProcess.suspend # XA0; всередині мьютекса теж ніби як не можна, тому що це гарантовано повісить процес. Можна було б дати зупиненого процесу потримати м'ютекс захоплений в іншому процесі (який його запускає періодично). Але як тоді цей м'ютекс відпустити третім процесом?)
Єдине що приходить в голову, що поки не кличуть в циклі крутити сліп, але все одно процес буде мучити процесор, а великий період сліпа сильно уповільнить час реакції.
Вообщем ніяк не зрозумію як же це реалізувати.
Коротше якщо викликати suspend і їм зупинити процес, то він вже ніяк назад не стартує (
так процеси або потоки?
здається Друге, тоді використовуй якийсь із WaitForХХХ
а що він дає WaitFor? мені він давав тільки зависання) тому в Execute нескінченний цикл, а якщо код в Execute закінчити, то він більше не перезапускається (А waitFor відвисне тільки коли Execute дійде до кінця.
взагалі це глюк якийсь або я що то неправильно роблю? чому resume не перезавантажує Execute ні в разі якщо вона закінчена, ні в разі якщо вона suspended = true;
купа питань і жодного рядка коду.
Таке відчуття, що людина не чув про події. Навіщо "крутити процес", якщо логічніше запускати його при необхідності, коли відбулося відповідне подія? Якщо не так, то поясни докладніше, ніж таким необхідним твої "процеси" займаються.
Таке відчуття, що людина не чув про події. Навіщо "крутити процес", якщо логічніше запускати його при необхідності, коли відбулося відповідне подія? Якщо не так, то поясни докладніше, ніж таким необхідним твої "процеси" займаються.
> Чому resume не перезавантажує Execute ні в разі якщо вона закінчена, ні в разі якщо вона suspended = true;
вона не для перезапуску, а для відновлення призупиненої роботи.
p.s. у тебе помилка в програмі. навіть не в тому що не виходить, про що запитуєш, а в логіці роботи з потоками.
> Таке відчуття, що людина не чув про події. Навіщо
> "Крутити процес", якщо логічніше запускати його при необхідності,
> # XA0; коли відбулося відповідне подія? Якщо не так, то
> Поясни докладніше, ніж таким необхідним твої "процеси"
> Займаються.
у мене є об'єкти класу до яких дуже часто йде звернення, заради нього то я і затіяв це # XA0; все (зробив його tThread) і ось він крутиться постійно і до нього йдуть запити постійно. Тобто задача зробити так щоб клієнт який запитує дані не чекав поки цей об'єкт чого то народить, а просто забирав результат і йшов далі, а процес раз в секунду оновлює результат.
Але є точно такі ж об'єкти того ж класу, які не так сильно затребувані у перших, і дуже швидко відпрацьовують по-друге, # XA0; в принципі я б їх навіть в основному потоці б міг відпрацьовувати, але, що мені тоді робити копію класу потоку? тому я намагаюся їх теж шукати в окремому потоці, але щоб не вантажили процесор тільки за викликом. Та й з іншого боку так більше гнучкості, якщо якийсь об'єкт починає отримувати багато запитів, то можна його перевести на постійний режим роботи.
ну а то що я там щось не чув) так це розділ для початківців - я багато чого не чув)
тьху, не процес, а потік)
> Але, що мені тоді робити копію класу потоку?
навіщо копію. в потоках такої ж код як і поза ним, викликати можна і як звичайну регулярну процедуру.