【发布时间】:2010-12-22 18:53:26
【问题描述】:
我在使用类 A 中的线程时遇到问题,例如,类 A 是类 B 的静态成员,在 dll 中。我正在使用 Visual Studio 9 并提升 1.40。请考虑以下代码:
mylib.h:
#include <boost/thread.hpp>
#include <windows.h>
#ifdef FOO_STATIC
#define FOO_API
#else
#ifdef FOO_EXPORT
#define FOO_API __declspec(dllexport)
#else
#define FOO_API __declspec(dllimport)
#endif
#endif
class FOO_API foo{
boost::thread* thrd;
public:
foo();
~foo();
void do_work();
};
class FOO_API bar{
static foo f;
public:
static foo& instance();
};
mylib.cpp:
#include "mylib.h"
foo::foo()
{
thrd = new boost::thread(boost::bind(&foo::do_work,this));
}
foo::~foo(){
thrd->join();
delete thrd;
}
void foo::do_work(){
printf("doing some works\n");
}
foo& bar::instance(){return f;}
foo bar::f;
在可执行应用程序中,我有:
main.cpp:
#include "mylib.h"
void main(){
bar::instance();
}
如果我将 mylib 静态链接到可执行应用程序,它会打印出“做一些工作”,而如果我动态链接它 (dll),它什么也不做。
我非常感谢任何帮助。
【问题讨论】:
-
使用调试器。用 /MD 编译。
标签: multithreading dll static