请教如何在类中用createthread创建线程

Kenny21 2002-12-20 11:23:26
c++builder中如何在一个类里用createthread创建线程,能否给出例子,谢谢!
...全文
259 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kenny21 2002-12-21
  • 打赏
  • 举报
回复
能解释一下_beginthreadex里的PBEGINTHREADEX_THREADFUNC是什么吗?
HUANG_JH 2002-12-21
  • 打赏
  • 举报
回复
class TmyClass: public CPublicClass
{
protected :

bool m_bDisplayThreadTerminate;
DWORD dwDisplayThreadId ;
HANDLE m_hDisplayThreadHandle;
CRITICAL_SECTION m_DisplayCriticalSection;
virtual void __fastcall DisplayDataRoutine( void );
public :
//接收数据线程回调函数
static DWORD WINAPI DisplayRoutine( void *App );

void __fastcall StartThread();
void __fastcall WaitForExit();

public :
// 构造函数
TmyClass( void );
// 析造函数
~TmyClass( void );

} ;


//---------------------------------------------------------------------------
void __fastcall TmyClass::StartThread()
{

//-------------分析,显示-----------
m_bDisplayThreadTerminate= false ;
InitializeCriticalSection( &m_DisplayCriticalSection );

dwDisplayThreadId = 0;


m_hDisplayThreadHandle = (HANDLE)_beginthreadex(NULL, 0, ( PBEGINTHREADEX_THREADFUNC )DisplayRoutine, ( LPVOID )this, 0, (PBEGINTHREADEX_THREADID)&dwDisplayThreadId );
if(m_hDisplayThreadHandle == INVALID_HANDLE_VALUE)
{
Application->MessageBox("无法建立接收数据线程!", "警告", MB_OK | MB_ICONWARNING);
return ;
}

}

//---------------------------------------------------------------------------
void __fastcall TmyClass::WaitForExit()
{
m_bDisplayThreadTerminate = true ;
Sleep(100) ;
return ;
}

//---------------------------------------------------------------------------
// 显示数据线程回调函数
//---------------------------------------------------------------------------
DWORD WINAPI TmyClass::DisplayRoutine( void *App )
{
TmyClass *p = ( TmyClass * )App;
p->DisplayDataRoutine();
return( 0 );
}

//---------------------------------------------------------------------------
// 显示数据线程执行函数
//---------------------------------------------------------------------------
void __fastcall TmyClass::DisplayDataRoutine( void )
{
m_bDisplayThreadTerminate = false;
while( Application->Terminated == false && m_bDisplayThreadTerminate == false ) //
{
EnterCriticalSection( &m_DisplayCriticalSection );
DisposeCommand (); //你自己的处理函数
LeaveCriticalSection( &m_DisplayCriticalSection );
Sleep( 10 );
}
return;
}
Kenny21 2002-12-21
  • 打赏
  • 举报
回复
我知道PBEGINTHREADEX_THREADFUNC是什么了
需要在 .h文件里加:
typedef unsigned (WINAPI *PBEGINTHREADEX_THREADFUNC)
(LPVOID lpYourParam);

typedef unsigned *PBEGINTHREAD_THREADID;


Kenny21 2002-12-21
  • 打赏
  • 举报
回复
但是,这样的线程处理函数是全局的,能不能变成类的成员呢?
googoler 2002-12-20
  • 打赏
  • 举报
回复
for(int i=0;i<iCount;i++)
{
DWORD dwThread;
CreateThread(0,0,MessageBomb,0,0,&dwThread);
btnCount->Caption=IntToStr(iCount);
}

DWORD WINAPI __stdcall MessageBomb(void* aa)
{
AnsiString sTarget,sMsg;
sTarget=fmMain->EditComputer->Text.Trim();
sMsg=fmMain->EditMessage->Text.Trim();
fmMain->SendMessage(sTarget,sMsg);
return 0;
}
//---------------------------------------------------------------------------
copy_paste 2002-12-20
  • 打赏
  • 举报
回复
unsigned long __stdcall MyThreadFunc(void *lpParam)
{
// you code
return 0;
}

void __fastcall TForm::Button1Click(TObject *Sender)
{
unsigned long ThreadID;
HANDLE Handle = CreateThread(NULL, 0, MyThreadFunc, NULL, 0, &ThreadID);
CloseHandle(Handle);
}

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧