C++ setTimout函数?

Ste*_*ger 1 c++ com multithreading

在C++中像setTimeout-function这样的JavaScript最便宜的方法是什么?

我需要这个:从现在起5000毫秒,启动函数xy(没有参数,没有返回值).

原因是我需要为文本到语音初始化COM,但是当我在dll attach上执行它时,它会崩溃.

如果我不从dllmain调用CoInitialize,它工作正常.

我只需要调用CoInitialize和CoCreateInstance,然后在其他函数中使用该实例.我可以通过检查NULL来捕获未初始化的实例,但我需要初始化COM - 而不会崩溃.

Len*_*ate 5

调用CoInitialize()DllMain()是一个坏的事情; 你可以做些什么,有很多限制DllMain(); 见这里:http://blogs.msdn.com/larryosterman/archive/2004/04/23/118979.aspx

即使DID工作可靠,然后从内部初始化COM DllMain()并不是一件特别好的事情,因为每个线程初始化COM并且你不知道应用程序本身想要做什么关于你想要的线程的COM公寓初始化COM ...这意味着你可能以一种方式初始化COM,然后应用程序可能需要以另一种方式初始化它,并且可能因为你的DLL做了什么而失败...

你可以在DllMain()你小心的时候启动一个线程(参见http://blogs.msdn.com/oldnewthing/archive/2007/09/04/4731478.aspx),然后在该线程上初始化COM并执行所有操作您在该线程上与COM相关的工作.您需要编组使用COM所需的任何数据,从您调用的任何线程到您自己的COM线程并从那里进行COM调用...

然后问题是你创建的COM对象的实例(你可以可靠地做你想做的事情)是否可以从调用你的DLL进行调用的线程中使用...你明白了如果需要,你必须编组接口指针等吗?

或者你应该通过COM公开你的功能,然后让应用程序加载你的DLL作为COM DLL,一切都会正常工作.您可以指定所需的公寓类型,并且应用程序负责为您正确设置.

因此,总而言之,您不需要回答您的问题.