FYI 1: UDF = функция, определяемая пользователем (рабочий лист) FYI 2: XLL = надстройка Excel (DLL -> XLL)
Я пишу надстройку XLL для Excel на C/C++, используя API Excel4() от Microsoft.
Ссылка: http://msdn.microsoft.com/en-us/library/bb687835.aspx
У меня есть «сложная» задача, и я хочу использовать несколько потоков для повышения производительности. Хотя я понимаю, что вычисления в Excel 2003 являются однопоточными, я хочу знать, может ли мой UDF (а) порождать потоки для выполнения работы, (б) ждать завершения потоков и (в) возвращать результат.
Чтобы быть предельно ясным, я не буду ни автоматизировать Excel, ни вызывать Excel4() в потоках.
Псевдокод:
Variant MyComplexUDF(Variant input1, Variant input2) { Thread t1 = new WorkerThread(input1); Thread t2 = new WorkerThread(input2); t1.join(); t2.join(); return [t1.Result(), t2.Result()]; }
На первый взгляд все выглядит нормально, но я не эксперт по библиотекам DLL/XLL и многопоточности.
P.S. Я искал Google (высокий и низкий) для этого ответа и ничего не нашел по этому вопросу.