社区
进程/线程/DLL
帖子详情
CreateThread()和AfxBeginThread()的区别???
doubletreeoflcl
2003-08-21 03:21:08
我的程序有一个主界面,主界面上有一个按钮,点击这个按钮会产生一个线程.我的目的是在产生这个线程后,主界面上的其他按钮也可以操作.但我在用CreateThread()时,却达不到这样的效果,结果是主界面仍然不能操作.但是用AfxBeginThread()就可以,不知道是为什么?请问用CreateThread()能达到这样的效果吗? 两者到底有何区别?????请大虾指导.在线等待.......
...全文
29
4
打赏
收藏
CreateThread()和AfxBeginThread()的区别???
我的程序有一个主界面,主界面上有一个按钮,点击这个按钮会产生一个线程.我的目的是在产生这个线程后,主界面上的其他按钮也可以操作.但我在用CreateThread()时,却达不到这样的效果,结果是主界面仍然不能操作.但是用AfxBeginThread()就可以,不知道是为什么?请问用CreateThread()能达到这样的效果吗? 两者到底有何区别?????请大虾指导.在线等待.......
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ustclancelot
2003-08-21
打赏
举报
回复
AfxBeginThread 是 MFC 的成员,自动创建 CWinThread 对象并调用 API 函数 CreateThread()。
doubletreeoflcl
2003-08-21
打赏
举报
回复
我的调用方法是这样的:
1.用CreateThread的方法:
线程函数的声明: DWORD WINAPI MyThread();
调用CreateThread的方式:
hThread = (HANDLE)CreateThread( &sa,0,
(LPTHREAD_START_ROUTINE) MyThread,
NULL, 0, &dwThreadId);
2.用AfxBeginThread的方法:
线程函数的声明: UINT MyThread (LPVOID pParam);
调用CreateThread的方式: AfxBeginThread(MyThread,NULL);
不知以上的方法中CreateThread的调用有错误吗???
DDHuang
2003-08-21
打赏
举报
回复
我不知道有什么区别,不过用afxbeginthread能做到的createthread也能做到,应该是你调用方法不对
David_7678
2003-08-21
打赏
举报
回复
AfxBeginThread其实是调用的api
而CreateThread是c的函数
最大的区别是AfxBeginThread与os结合紧密,所以性能好些
而CreateThread是c的, 所以通用性好点
AfxBe
gin
Thread
和
Create
Thread
创建工作线程
分别采用
AfxBe
gin
Thread
Create
Thread
创建线程其中
AfxBe
gin
Thread
工程用的是vs2010
Create
Thread
工程用的是vc6.0
VC中CWin
Thread
类以及和
create
thread
API的
区别
分析
主要介绍了VC中CWin
Thread
类以及和
create
thread
API的
区别
分析,较为详细的讲述了CWin
Thread
类的原理,并以实例形式对
AfxBe
gin
Thread
函数的内部实现进行了解释说明,需要的朋友可以参考下
Create
Thread
创建多线程与单线程比较
仿多线程的效果一般有2种办法:第一种是通过定时器;第二种是启动多线程,不同模式下启动函数不同,mfc与API与WIN32下面注意点也是有
区别
的! VC启动一个新线程的三种方法,有需要的朋友可以参考下。 第一种
AfxBe
gin
Thread
() 用
AfxBe
gin
Thread
()函数来创建一个新线程来执行任务,工作者线程的
AfxBe
gin
Thread
的原型如下: CWin
Thread
*
AfxBe
gin
Thread
(AFX_
THREAD
PROC pfn
Thread
Proc, LPVOID lParam, int nPriority =
THREAD
_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dw
Create
Flags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );//用于创建工作者线程 返回值: 成功时返回一个指向新线程的线程对象的指针,否则NULL。 pfn
Thread
Proc : 线程的入口函数,声明一定要如下: UINT My
Thread
Function(LPVOID pParam),不能设置为NULL; pParam : 传递入线程的参数,注意它的类型为:LPVOID,所以我们可以传递一个结构体入线程. nPriority : 线程的优先级,一般设置为 0 .让它和主线程具有共同的优先级. nStackSize : 指定新创建的线程的栈的大小.如果为 0,新创建的线程具有和主线程一样的大小的栈 dw
Create
Flags : 指定创建线程以后,线程有怎么样的标志.可以指定两个值:
CREATE
_SUSPENDED : 线程创建以后,会处于挂起状态,直到调用:Resume
Thread
0 : 创建线程后就开始运行. lpSecurityAttrs : 指向一个 SECURITY_ATTRIBUTES 的结构体,用它来标志新创建线程的安全性.如果为 NULL, 那么新创建的线程就具有和主线程一样的安全性. 如果要在线程内结束线程,可以在线程内调用 AfxEnd
Thread
. 一般直接用
AfxBe
gin
Thread
(
Thread
Proc,this); 示例: UINT myproc(LPVOID lParam){CITTDlg *pWnd = (CITTDlg *)lParam; //将窗口指针赋给无类型指针pWnd->KMeansSegment(); //要执行的函数return 1;}void CITTDlg::KMeansSegment(){// 主要处理函数在这里写}void CITTDlg::OnKMeansSegment() //按钮点击执行{
AfxBe
gin
Thread
(myproc, (LPVOID)this);//启动新的线程} 注意,工作者线程的函数必须是全局函数或静态成员函数,不能是普通的成员函数。 第二种
Create
Thread
()函数原型为:HANDLE
Create
Thread
( NULL, // 没有安全描述符 0, // 默认线程栈的大小 My
Thread
Proc, // 线程函数指针,即函数名 (LPVOID)&n, // 传递参数 NULL, // 没有附加属性 NULL // 不需要获得线程号码 ); Creat
Thread
,它返回的是一个句柄;如果不需要再监视线程,则用CloseHandle()关闭线程句柄。 线程的函数必须定义为: DWORD WINAPI My
Thread
Proc(LPVOID pParameter); 下面演示多线程操作控件,点击一个Button然后运行一个线程,将字符串显示在CEdit控件里面; 示例: .h头文件struct hS {CString Tmp;CTestDlg *hWnd; };//定义全局结构体,用来传递自定义消息DWORD WINAPI
Thread
Proc(LPVOIDlpParam);//线程函数声明,全局函数public: CString chtmp; struct hS *hTmp;protected: HANDLE m_h
Thread
;//线程句柄 CEdit m_Edit;.cpp实现文件//线程执行函数DWORD WINAPI
Thread
Proc(LPVOID lpParam){//在这里写处理函数struct hS *Tmp2;Tmp2 = (hS*)lpParam;// 操作: Tmp2->hWnd->m_Edit.SetWindowText( (LPTSTR)Tmp2->Tmp );}void CTestDlg::OnBnClickedButton1(){ hTmp->Tmp = chtmp; hTmp->hWnd = this;//关键是把this指针传进去 m_h
Thread
=
Create
Thread
(NULL,0,
Thread
Proc,hTmp,0,NULL);//创建新线程 CloseHandle(m_h
Thread
);} 用
Create
Thread
()函数创建线程将返回一个线程句柄,通过该句柄你可以控制和操作该线程,当你不用时可以一创建该线程后就关闭该句柄,有专门的函CloseHandle()。关闭句柄不代表关闭线程,只是你不能在外部控制该线程(比如,提前结束,更改优先级等)。在线程结束后,系统将自动清理线程资源,但并不自动关闭该句柄,所以线程结束后要记得关闭该句柄。 第三种_be
gin
thread
() 函数原型为:intptr_t _be
gin
thread
( void( *start_address )( void * ), //指向新线程调用的函数的起始地址 unsigned stack_size, //堆栈大小,设置0为系统默认值 void *arglist //传递给线程函数的参数,没有则为NULL ); 返回值: 假如成功,函数将会返回一个新线程的句柄,用户可以像这样声明一个句柄变量存储返回值: HANDLE hStdOut = _be
gin
thread
( CheckKey, 0, NULL )。如果失败_be
gin
thread
将返回-1。所在库文件: #include 线程函数的定义: 对于_be
gin
thread
()创建的线程,其线程函数定义为: void
Thread
Pro(void * pArguments ); _be
gin
thread
ex()为_be
gin
thread
()的升级版。 总结:
AfxBe
gin
Thread
是MFC的全局函数,是对
Create
Thread
的封装。
Create
Thread
是Win32 API函数,
AfxBe
gin
Thread
最终要调到
Create
Thread
。而_be
gin
thread
是C的运行库函数。
多线程编程示例源代码
多线程编程示例代码,包含
Create
Thread
_be
gin
thread
AFXbe
gin
Thread
3个API的示例
VC 线程基础知识总结
介绍了
Afxbe
gin
Thread
Create
Thread
的
区别
及使用方法
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章