怎样建立一个可触发式的线程

soloxiao 2005-08-20 09:05:10
建立的线程都在execute中运行,我想在这个线程中做接收socket数据,是否能在其中写event(不是createEvent),比如用TClientSocket中的OnRead,现在因为一到线程中来就被execute占用了cpu


我不会用线程,赐教了,谢谢!
...全文
128 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
7rainbow 2005-08-21
  • 打赏
  • 举报
回复
//
上面写错了一点,没有这一句 ServerSmtpSub(Socket_Smtp);
7rainbow 2005-08-21
  • 打赏
  • 举报
回复
当然可以了。
你接收数据,可以用的啊,以前写过一些,希望对你帮助

当然可以了。
你接收数据,可以用的啊,以前写过一些,希望对你帮助

//.h
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ScktComp.hpp>
#include <ExtCtrls.hpp>

class SmtpThread : public TThread
{
private:

protected:
void __fastcall Execute();
public:
TServerClientWinSocket *Socket_Smtp;
__fastcall SmtpThread(bool CreateSuspended);
};

class TForm1 : public TForm
{
__published: // IDE-managed Components
TServerSocket *ServerSocket_smtp;
TButton *Button1;
TButton *Button2;

void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);


private: // User declarations

public: // User declarations
__fastcall TForm1(TComponent* Owner);

};


.cpp

//--------------------------------------------------
//--------------------------------------------------
__fastcall SmtpThread::SmtpThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}

//--------------------------------------------------
void __fastcall SmtpThread::Execute()
{
ServerSmtpSub(Socket_Smtp);
AnsiString str_buftmp;

if (!Socket->Connected)
{
return ;
}

str_buftmp=Socket->ReceiveText();//接收

if (Socket->Connected)
Socket->Close();
}
//--------------------------------------------------
// 要先在属性中设定端口,(25),在Accept事件中写如下
void __fastcall TForm1::ServerSocket_smtpAccept(TObject *Sender,
TCustomWinSocket *Socket)
{
try
{
SmtpThread *newthread=new SmtpThread(true);
newthread->Socket_Smtp=(TServerClientWinSocket *) Socket;
newthread->Resume();
}
catch(...)
{
}
}
//--------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try{
ServerSocket_smtp->Active=true;
ShowMessage("端口打开成功");
}
catch(...)
{
ShowMessage("25端口打开失败");
}
}
//--------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ServerSocket_smtp->Active=false;
}

northsoft_ 2005-08-21
  • 打赏
  • 举报
回复
工作线程不负责处理windows消息的,因此不能用TClientSocket的OnRead

13,874

社区成员

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

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