Para Excel 2003, uma UDF em um XLL pode usar vários threads?
-
12-12-2019 - |
Pergunta
Para sua informação 1:Udf = definido pelo usuário (planilha) função fyi 2:XLL = suplemento do Excel (DLL -> XLL)
Estou escrevendo um suplemento XLL para Excel em C/C++ usando a API Excel4() da Microsoft.
Link: http://msdn.microsoft.com/en-us/library/bb687835.aspx
Tenho uma tarefa "complicada" que quero usar vários threads para melhor desempenho.Embora eu entenda que o cálculo no Excel 2003 é de thread único, quero saber se minha UDF pode (a) gerar threads para fazer o trabalho, (b) aguardar a conclusão dos threads e (c) retornar o resultado.
Para ficar bem claro, não farei nenhuma automação do Excel nem chamarei Excel4() nas threads.
Pseudo-código:
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()]; }
Superficialmente, isso parece bom, mas não sou um especialista em DLLs/XLLs e threading.
P.S.Pesquisei no Google (em todos os lugares) por esta resposta e não consigo encontrar nada sobre o assunto.
Solução
Você pode iniciar quantos tópicos quiser e esperar por eles.Também há suporte para UDFs assíncronos na versão mais recente da API.Você pode encontrar alguns exemplos em http://xll.codeplex.com.Dê uma olhada em test/async.cpp: http://xll.codeplex.com/SourceControl/changeset/view/14528#139508