C++builder中提供了_beginthread函数,和C++标准库中的相应似.
普通调用,方法如下:
#include <process.h>
#include <stddef.h>
#include <utilcls.h>
void test1(void * p)
{
OLETRACE("类成员变量m_msg=%d,线程ID=%d",(int)p,_threadid);
}
void __fastcall TForm3::Button12Click(TObject *Sender)
{
int a = 120;
int handle = _beginthread(test1,4096,(void *)a);
OLETRACE("线程ID=%d",handle);
}
回调函数为全局函数或静态成员函数.
如果要将类中的成员函数,作为线程回调函数,方法如下:
#include <process.h>
#include <errno.h>
#include <stddef.h>
#include <utilcls.h>
void TForm3::test(void * p)
{//m_msg为类的成变量
OLETRACE("类成员变量m_msg=%s,线程ID=%d",m_msg.c_str(),_threadid);
_endthread();
}
void __fastcall TForm3::Button11Click(TObject *Sender)
{
typedef void (* stdProc)(void * param) ;//普通函数指针
typedef void (TForm3:: *ObjectProc)(void * param);//类成员函数调用指针
ObjectProc myProc = (ObjectProc)&TForm3::test;//类成员函数指针初始化
m_msg = "hello";//TForm3中的成员变量
int handle = _beginthread(*(stdProc*)&myProc,4096,this);//第三个参数必须为类对象指针
OLETRACE("线程ID=%d",handle);
}
此代码并非仅针对窗口类方法成员,其他类也是如此。注意_beginthread第三个参数为成员方法所在类的指针或引用