在多线程中,响应控件的事件的问题 ( 积分: 200 )

  • 主题发起人 主题发起人 sharkhu
  • 开始时间 开始时间
S

sharkhu

Unregistered / Unconfirmed
GUEST, unregistred user!
在多线程中,我用了一个 OCX 控件,现在在线程中响应控件的事件有点问题。


代码如下


代码:


.h 中

class TCommThread : public TThread
{
private:
TComm *comm

protected:
void __fastcall Execute()

void __fastcall OnRecvMsg(TObject *Sender)


public:
__fastcall TCommThread(bool CreateSuspended)

}



.cpp中

__fastcall TCommThread::TCommThread(bool CreateSuspended)
: TThread(CreateSuspended)
{

CoInitialize(NULL)

comm=new TComm(Application)

comm->OpenComm()


comm->OnRecvMsg = OnRecvMsg

}
//---------------------------------------------------------------------------
void __fastcall TCommThread::Execute()
{

while(!Terminated){
//ShowMessage("systen is active!")

Sleep(2000)

}
}
//---------------------------------------------------------------------------
void __fastcall TCommThread::OnRecvMsg(TObject *Sender)
{
ShowMessage("have new message!")

//写日志还是没有
}




请高手指点

comm->OnRecvMsg = OnRecvMsg


为什么始终不能响应这个事件呢?

确定1) 肯定有数据进来了 (2) 线程也是活动的 (3) comm 肯定创建成功了,因为可以 sendMsg("测试")
 
在多线程中,我用了一个 OCX 控件,现在在线程中响应控件的事件有点问题。


代码如下


代码:


.h 中

class TCommThread : public TThread
{
private:
TComm *comm

protected:
void __fastcall Execute()

void __fastcall OnRecvMsg(TObject *Sender)


public:
__fastcall TCommThread(bool CreateSuspended)

}



.cpp中

__fastcall TCommThread::TCommThread(bool CreateSuspended)
: TThread(CreateSuspended)
{

CoInitialize(NULL)

comm=new TComm(Application)

comm->OpenComm()


comm->OnRecvMsg = OnRecvMsg

}
//---------------------------------------------------------------------------
void __fastcall TCommThread::Execute()
{

while(!Terminated){
//ShowMessage("systen is active!")

Sleep(2000)

}
}
//---------------------------------------------------------------------------
void __fastcall TCommThread::OnRecvMsg(TObject *Sender)
{
ShowMessage("have new message!")

//写日志还是没有
}




请高手指点

comm->OnRecvMsg = OnRecvMsg


为什么始终不能响应这个事件呢?

确定1) 肯定有数据进来了 (2) 线程也是活动的 (3) comm 肯定创建成功了,因为可以 sendMsg("测试")
 
oid __fastcall TCommThread::Execute()
{

while(!Terminated){
//ShowMessage("systen is active!")

Sleep(2000)

}
}
以上有问题吧。
把sleep(2000)改成delay(2000)看看:

procedure Delay(msecs:integer)
//
var
FirstTickCount:longint;
begin
FirstTickCount:=GetTickCount;
repeat
Application.ProcessMessages;
until ((Longint(GetTickCount)-FirstTickCount) >= Longint(msecs));
end;
 
还是不行
 
刚才我用delphi做了一个线程,也是响应消息的~~会不会是你的sleep得太久了~~我只sleep(10)
 
我的写法跟你一样~~
 

Similar threads

后退
顶部