在ATL的线程中如何调用接口的函数?

naile 2002-09-24 11:08:40
在MFC中一个线程要启动一个类的函数可以用SendMessage(该类的句并,...)发送信号,类中回调函数接受到相应信号后启动函数的方法.
但在ATL中可否用这种方法,如可用,那么句并该如何取得?回调函数又如何调用?如不可用,又有什么好的方法实现以上功能?
...全文
79 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
oldworm 2002-09-24
  • 打赏
  • 举报
回复
以上代码记得要#include <process.h>
oldworm 2002-09-24
  • 打赏
  • 举报
回复
线程定义一般模式如下:

class CRawThread
{
private:
...
public:
...
friend unsigned __stdcall _raw_thread_function(void *param);
//将线程函数定义为这个类的友元函数,避免线程内部访问类的私有元素的时候出现错误。
};


unsigned __stdcall _raw_thread_function(void *param)
{
CRawThread *pThis = (CRawThread *)param; //这里将参数转换为原来的类型
IPHEADER *pip;
char buf[2048];
//------------------------------------------------------------------------
if(pThis->CreateSocket())
{
while(1)
{
if(WaitForSingleObject(pThis->m_hExitThread, 0) == WAIT_OBJECT_0)
{
ResetEvent(pThis->m_hExitThread);
goto EXIT_THREAD_0;
}
......
Sleep(30);
}
}
//------------------------------------------------------------------------
EXIT_THREAD_0:
pThis->CleanSocket();
SetEvent(pThis->m_hExitThreadOk);
_endthreadex(0);

return 0;
}

BOOL CRawThread::StartThread()
{
if(m_hThread == NULL){
//如果线程没有启动,启动线程
m_hThread = (HANDLE)_beginthreadex(
NULL,
0,
_raw_thread_function,
this, //这里传递参数
0,
&m_uThreadId);
return (m_hThread != NULL);
}
return TRUE;
}

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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