对于Excel 2003,XLL中的UDF可以使用多个线程吗?

时间:2012-05-22 05:25:46

标签: multithreading excel user-defined-functions xll

FYI 1:UDF =用户定义(工作表)功能 仅供参考2:XLL = Excel加载项(DLL - > XLL)

我正在使用Microsoft的Excel4()API在C / C ++中编写Excel的XLL加载项。
链接:http://msdn.microsoft.com/en-us/library/bb687835.aspx

我有一个“复杂”的任务,我想使用多个线程来获得更好的性能。虽然我知道Excel 2003中的计算是单线程的,但我想知道我的UDF是否可以(a)生成线程来完成工作,(b)等待线程完成,以及(c)返回结果。

非常清楚,我不会做任何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()];
}

从表面上看,这似乎没问题,但我不是DLLs / XLL和线程专家。

P.S。我已经搜索了谷歌(高和低)这个答案,但在这个问题上找不到任何东西。

1 个答案:

答案 0 :(得分:2)

您可以根据需要启动任意数量的线程,然后等待它们。在最新版本的API中也支持异步UDF。您可以在http://xll.codeplex.com中找到一些示例。看一下test / async.cpp:http://xll.codeplex.com/SourceControl/changeset/view/14528#139508

相关问题