【发布时间】:2011-11-27 11:33:58
【问题描述】:
我想在 Visual Studio 2010 中创建一个包含 2 个线程的 C++ 应用程序:
- 从外部文件中读取数据
- 将数据写入外部文件
我已经阅读了有关线程的理论,但并不真正了解如何使用它。有没有人可以告诉我如何在 Visual Studio 2010 中简单地定义和运行这两个线程?
目前我有以下不起作用的示例:
class Thread
{
public:
Thread();
int Start(void * arg);
protected:
int Run(void * arg);
static void * EntryPoint(void*);
virtual void Setup();
virtual void Execute(void*);
void * Arg() const {return Arg_;}
void Arg(void* a){Arg_ = a;}
private:
THREADID ThreadId_;
void * Arg_;
};
Thread::Thread() {}
int Thread::Start(void * arg)
{
Arg(arg); // store user data
int code = thread_create(Thread::EntryPoint, this, & ThreadId_);
return code;
}
int Thread::Run(void * arg)
{
Setup();
Execute( arg );
}
/*static */
void * Thread::EntryPoint(void * pthis)
{
Thread * pt = (Thread*)pthis;
pt->Run( pt->Arg() );
}
virtual void Thread::Setup()
{
// Do any setup here
}
virtual void Thread::Execute(void* arg)
{
// Your code goes here
}
我也愿意提供好的教程或代码示例。
【问题讨论】:
-
它是否编译和链接?如果是,它在哪里失败?
-
不,它不编译,因为必须包含一些头文件,但我不知道是哪个
-
Start() 方法是从程序的启动代码中调用的吗? (例如来自静态声明对象的构造函数?)
-
编写包装器的麻烦在于,如果包装器不是底层 api 的好模型,您将陷入困境。线程的入口点必须是静态函数。要么根本不使用包装器,这是了解线程如何工作的好方法,要么使用其他人的包装器,例如 boost::thread。