Другая опция состояла бы в том, чтобы перепроектировать DDL...
DBMS_METADATA.GET_DDL('CONSTRAINT', 'SYS_C003415')
Некоторые примеры здесь....
Вы хотите, чтобы ваш поток просто остановился, пока какой-то другой поток не скажет ему снова запуститься? Если это так, вы можете использовать NSConditionLock. NSConditionLock похож на условную переменную. У него есть несколько основных методов, lockWhenCondition и unlockWithCondition, а также lock. Типичное использование - это когда ваш фоновый поток ожидает блокировки условия с помощью «lockWhenCondition:», а внутренний поток переднего плана устанавливает условие, которое приводит к пробуждению фонового потока. Условием является простое целое число, обычно перечисление.
Вот пример:
enum {
kWorkTodo = 1,
kNoWorkTodo = 0
}
- (id)init {
if ((self = [super init])) {
theConditionLock = [[NSCoditionLock alloc] initWithCondition: kNoWorkTodo];
workItems = [[NSMutableArray alloc] init];
}
}
- (void)startDoingWork {
[NSThread detachNewThreadSelector:@selector(doBackgroundWork) toTarget:self withObject:nil];
}
- (void)doBackgroundWork:(id)arg {
while (YES) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray *items = nil;
[theConditionLock lockWhenCondition:kWorkTodo]; // Wait until there is work to do
items = [NSArray arrayWithArray:workItems]
[workItems removeAllObjects];
[theConditionLock unlockWithCondition:kNoWorkTodo];
for(id item in items) {
// Do some work on item.
}
[pool drain];
}
}
- (void)notifyBackgroundThreadAboutNewWork {
[theConditionLock lock];
[workItems addObject:/* some unit of work */];
[theConditionLock unlockWithCondition:kWorkTodo];
}
В этом примере, когда startDoingWork вызывается, doBackgroundWork: запускается в фоновом потоке, но затем останавливается, потому что нет никакой работы . После вызова notifyBackgroundThreadAboutNewWork выполните команду doBackgroundWork:
Если у вас действительно есть задачи, которые нужно выполнить в фоновом потоке, но одна задача требует завершения другой перед ее выполнением, я бы рекомендовал взглянуть на NSOperation и NSOperationQueue. NSOperation поддерживает установку очень сложных зависимостей, а NSOperationQueue будет обрабатывать планирование и выполнение этих операций на любом количестве фоновых потоков в правильном порядке. Документация Apple по этим вопросам довольно хороша, а у Дрю МакКормака есть отличная статья по этой теме на MacResearch.
Непонятно, что вы хотите сделать. Остановить поток и возобновить ту же функцию в новом потоке? (Это было бы бессмысленно - что не так со старым потоком?) Остановить поток и возобновить ту же функцию в другом существующем потоке?
В любом случае, нет, это невозможно, и это даже плохая идея. Правильное решение - разделить вашу функцию на две части, а затем использовать часть или весь цикл выполнения, NSTimer, методы performSelector…
,