Я понял, как это решить. Это должен быть отделенный объект под названием Spot. Мой код более сложный, поэтому я буду вставлять код, который я нашел на форумах Adobe, он просто короче. Вы можете пропустить создание образца, новый образец будет автоматически добавлен с тем же именем, что и newSpot. Вы можете назначить цвет образца для pathItem (не для newSpot напрямую), и spot будет привязан к цвету pathItem.
addSpot ('FOIL', 10, 0, 100, 0);
function addSpot(name, c, m, y, k) {
try {
swatch = app.activeDocument.swatches[name]; // if swatch exists....
addSpot (name+='1', c, m, y, k); // ...add 1 to swatch name
}
catch (e) {
var newSpot = app.activeDocument.spots.add();
newSpot.name = name;
var newColor = new CMYKColor();
newColor.cyan = c;
newColor.magenta = m;
newColor.yellow = y;
newColor.black = k;
newSpot.colorType = ColorModel.SPOT;
newSpot.color = newColor;
var newSpotColor = new SpotColor();
newSpotColor.spot = newSpot;
}
}
Из pthread_cond_signal Руководства:
pthread_cond_broadcast () и pthread_cond_signal () функции не должны иметь никакого эффекта, если не будет никаких потоков, в настоящее время блокируемых на конусовидном.
Я предлагаю, чтобы Вы использовали Семафоры. В основном каждый раз задача вставляется в очередь, Вы семафор. Блоки рабочего потока на семафоре "вниз" 'лугом это. Так как это будет' редактор одно время для каждой задачи, рабочий поток продолжится, пока существуют задачи в очереди. Когда очередь пуста, семафор в 0, и блоки рабочего потока, пока новая задача не прибывает. Семафоры также легко обрабатывают случай, когда больше чем 1 задача прибыла, в то время как рабочий был занят. Заметьте, что все еще необходимо заблокировать доступ к очереди для хранения, вставляет/удаляет атомарный.
Семафоры являются хорошим if-and-only-if, Ваша очередь уже ориентирована на многопотоковое исполнение. Кроме того, некоторые семафорные реализации могут быть ограничены главным встречным значением. Даже маловероятно, что Вы превысили бы максимальное значение.
Самый простой и корректный способ сделать это следует:
pthread_mutex_t queue_lock;
pthread_cond_t not_empty;
queue_t queue;
push()
{
pthread_mutex_lock(&queue_lock);
queue.insert(new_job);
pthread_cond_signal(¬_empty)
pthread_mutex_unlock(&queue_lock);
}
pop()
{
pthread_mutex_lock(&queue_lock);
if(queue.empty())
pthread_cond_wait(&queue_lock,¬_empty);
job=quque.pop();
pthread_mutex_unlock(&queue_lock);
}