社区
进程/线程/DLL
帖子详情
使用_beginthreadex创建线程失败
shootingstars
2003-08-20 02:36:03
函数返回的句柄正确,但是过了一会儿显示
Debug Error
Programe:........
R6016
- not enough space for thread data
在线程函数中设置断点按F5,程序未运行到断点处。
为什么,那位出现过这种情况,是由于什么情况造成的?
...全文
126
2
打赏
收藏
使用_beginthreadex创建线程失败
函数返回的句柄正确,但是过了一会儿显示 Debug Error Programe:........ R6016 - not enough space for thread data 在线程函数中设置断点按F5,程序未运行到断点处。 为什么,那位出现过这种情况,是由于什么情况造成的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
shootingstars
2003-08-20
打赏
举报
回复
是不是连接的库不对?
UP,请求援助。。。
DDHuang
2003-08-20
打赏
举报
回复
咋会呢,没空间??
Create
Thre
ad
创建
多
线程
与单
线程
比较
仿多
线程
的效果一般有2种办法:第一种是通过定时器;第二种是启动多
线程
,不同模式下启动函数不同,mfc与API与WIN32下面注意点也是有区别的! VC启动一个新
线程
的三种方法,有需要的朋友可以参考下。 第一种AfxBe
gin
Thre
ad() 用AfxBe
gin
Thre
ad()函数来
创建
一个新
线程
来执行任务,工作者
线程
的AfxBe
gin
Thre
ad的原型如下: CWin
Thre
ad* AfxBe
gin
Thre
ad(AFX_
THRE
ADPROC pfn
Thre
adProc, LPVOID lParam, int nPriority =
THRE
AD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );//用于
创建
工作者
线程
返回值: 成功时返回一个指向新
线程
的
线程
对象的指针,否则NULL。 pfn
Thre
adProc :
线程
的入口函数,声明一定要如下: UINT My
Thre
adFunction(LPVOID pParam),不能设置为NULL; pParam : 传递入
线程
的参数,注意它的类型为:LPVOID,所以我们可以传递一个结构体入
线程
. nPriority :
线程
的优先级,一般设置为 0 .让它和主
线程
具有共同的优先级. nStackSize : 指定新
创建
的
线程
的栈的大小.如果为 0,新
创建
的
线程
具有和主
线程
一样的大小的栈 dwCreateFlags : 指定
创建
线程
以后,
线程
有怎么样的标志.可以指定两个值: CREATE_SUSPENDED :
线程
创建
以后,会处于挂起状态,直到调用:Resume
Thre
ad 0 :
创建
线程
后就开始运行. lpSecurityAttrs : 指向一个 SECURITY_ATTRIBUTES 的结构体,用它来标志新
创建
线程
的安全性.如果为 NULL, 那么新
创建
的
线程
就具有和主
线程
一样的安全性. 如果要在
线程
内结束
线程
,可以在
线程
内调用 AfxEnd
Thre
ad. 一般直接用AfxBe
gin
Thre
ad(
Thre
adProc,this); 示例: UINT myproc(LPVOID lParam){CITTDlg *pWnd = (CITTDlg *)lParam; //将窗口指针赋给无类型指针pWnd->KMeansSegment(); //要执行的函数return 1;}void CITTDlg::KMeansSegment(){// 主要处理函数在这里写}void CITTDlg::OnKMeansSegment() //按钮点击执行{AfxBe
gin
Thre
ad(myproc, (LPVOID)this);//启动新的
线程
} 注意,工作者
线程
的函数必须是全局函数或静态成员函数,不能是普通的成员函数。 第二种Create
Thre
ad()函数原型为:HANDLECreate
Thre
ad( NULL, // 没有安全描述符 0, // 默认
线程
栈的大小 My
Thre
adProc, //
线程
函数指针,即函数名 (LPVOID)&n, // 传递参数 NULL, // 没有附加属性 NULL // 不需要获得
线程
号码 ); Creat
Thre
ad,它返回的是一个句柄;如果不需要再监视
线程
,则用CloseHandle()关闭
线程
句柄。
线程
的函数必须定义为: DWORD WINAPI My
Thre
adProc(LPVOID pParameter); 下面演示多
线程
操作控件,点击一个Button然后运行一个
线程
,将字符串显示在CEdit控件里面; 示例: .h头文件struct hS {CString Tmp;CTestDlg *hWnd; };//定义全局结构体,用来传递自定义消息DWORD WINAPI
Thre
adProc(LPVOIDlpParam);//
线程
函数声明,全局函数public: CString chtmp; struct hS *hTmp;protected: HANDLE m_h
Thre
ad;//
线程
句柄 CEdit m_Edit;.cpp实现文件//
线程
执行函数DWORD WINAPI
Thre
adProc(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
Thre
ad =Create
Thre
ad(NULL,0,
Thre
adProc,hTmp,0,NULL);//
创建
新
线程
CloseHandle(m_h
Thre
ad );} 用Create
Thre
ad()函数
创建
线程
将返回一个
线程
句柄,通过该句柄你可以控制和操作该
线程
,当你不用时可以一
创建
该
线程
后就关闭该句柄,有专门的函CloseHandle()。关闭句柄不代表关闭
线程
,只是你不能在外部控制该
线程
(比如,提前结束,更改优先级等)。在
线程
结束后,系统将自动清理
线程
资源,但并不自动关闭该句柄,所以
线程
结束后要记得关闭该句柄。 第三种_be
gin
thre
ad() 函数原型为:intptr_t _be
gin
thre
ad( void( *start_address )( void * ), //指向新
线程
调用的函数的起始地址 unsigned stack_size, //堆栈大小,设置0为系统默认值 void *arglist //传递给
线程
函数的参数,没有则为NULL ); 返回值: 假如成功,函数将会返回一个新
线程
的句柄,用户可以像这样声明一个句柄变量存储返回值: HANDLE hStdOut = _be
gin
thre
ad( CheckKey, 0, NULL )。如果
失败
_be
gin
thre
ad将返回-1。所在库文件: #include
线程
函数的定义: 对于_be
gin
thre
ad()
创建
的
线程
,其
线程
函数定义为: void
Thre
adPro(void * pArguments ); _be
gin
thre
a
dex
()为_be
gin
thre
ad()的升级版。 总结:AfxBe
gin
Thre
ad是MFC的全局函数,是对Create
Thre
ad的封装。 Create
Thre
ad是Win32 API函数,AfxBe
gin
Thre
ad最终要调到Create
Thre
ad。而_be
gin
thre
ad是C的运行库函数。
socket 动态链接库
这是我自己编写的 测试好使通过 //======================================================================== //绑定协议栈-TCPServer mode //======================================================================== int dllBindTCPSockServer(SOCKADDR_IN pSockAddr,RECV_DATA_CALLBACK DataCallBack, VOID* pContext) { int res = 0; //Create Socket if(glb_SockTCPServer!=NULL) { OutputDebugString("套接字已存在!"); return -1; } glb_SockTCPServer = socket(AF_INET,SOCK_STREAM,0); //Create Socket res = WSAGetLastError(); if(res) { glb_SockTCPServer = NULL; OutputDebugString("套接字建立
失败
!"); return res; } pSockAddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY); pSockAddr.sin_family=AF_INET; pSockAddr.sin_port = htons(pSockAddr.sin_port); res = bind(glb_SockTCPServer,(SOCKADDR*)&pSockAddr,sizeof(SOCKADDR)); if(res) { OutputDebugString("绑定
失败
!"); closesocket(glb_SockTCPServer); glb_SockTCPServer = NULL; return res; } OutputDebugString("绑定成功!"); res = listen(glb_SockTCPServer,5); if(res) { OutputDebugString("监听
失败
!"); closesocket(glb_SockTCPServer); glb_SockTCPServer = NULL; return res; } OutputDebugString("开始网络监听..."); //Register RecvDataCallBackServer glb_lpFunCallBackTCPServer = DataCallBack; glb_pContext = pContext; //Create Listen
Thre
ad UINT (WINAPI * pFnStartAddr)(LPVOID); pFnStartAddr = WinSockListen
Thre
ad; glb_WinSockListen
Thre
ad = (HANDLE)_be
gin
thre
a
dex
(NULL, 0, pFnStartAddr, NULL, 0,//0 for running, CREATE_SUSPENDED NULL); if (glb_WinSockListen
Thre
ad==NULL) { OutputDebugString("
创建
监听
线程
失败
!"); closesocket(glb_SockTCPServer); glb_SockTCPServer = NULL; glb_WinSockListen
Thre
ad = NULL; return -2; } return 0; }
C++
使用
_be
gin
thre
a
dex
创建
线程
、
线程
句柄(等待
线程
关闭)、
线程
id的作用(发送
线程
消息)
_be
gin
thre
a
dex
c语言库 process.h 中的函数, 用来
创建
一个
线程
unsignedlong_be
gin
thre
a
dex
( void*security,//安全属性,为NULL时表示默认安全性 unsignedstack_size,//
线程
的堆栈大小,一般默认为0 ...
用_be
gin
thre
a
dex
创建
线程
http://jialinwang.blog.163.com/blog/static/1014026912009415113716375/用_be
gin
thre
a
dex
创建
线程
_be
gin
thre
a
dex
参数说明 unsigned long _be
gin
thre
a
dex
( void *security, unsignedstack_size, unsigned ( __std
_be
gin
thre
a
dex
创建
多
线程
解读
一、解释 (1)如果你正在编写C/C++代码,决不应该调用Create
Thre
ad。相反,应该
使用
VisualC++运行期库函数_be
gin
thre
a
dex
,退出也应该
使用
_end
thre
a
dex
。如果不
使用
Microsoft的VisualC++编译器,你的编译器供应商有它自己的Create
Thre
ad替代函数。不管这个替代函数是什么,你都必须
使用
。 (2)因为_be
gin
thre
a
dex
和_en...
进程/线程/DLL
15,471
社区成员
49,181
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章