创建一个线程,为什么不执行?

lvyao1011 2006-04-20 10:29:37
在VC6环境下编程,调试的时候选择 DEBUG->THREADS,并没有发现新创建的线程,很郁闷
高手帮个忙,看看是什么问题
主要代码如下。


// A.h 文件
class A
{
/*...*/
public:
creat(); // 用来创建一个线程
/*...*/
private:
SOCKET s; // 传递给线程的参数
};

// A.cpp 文件
#include "A.h"
/*...*/

DWORD ThreadFun(LPVOID lpParam); // 线程调用的函数

A::create()
{
DWORD dwThreadId;
HANDLE hThread;
hThread = CreateThread(NULL, 0,
reinterpret_cast<LPTHREAD_START_ROUTINE>(ThreadFun),
&s, 0, &dwThreadId);
}

DWORD ThreadFun(LPVOID lpParam)
{
SOCKET sock;
sock = reinterpret_cast<SOCKET>(lpParam);
/*...*/
}
...全文
416 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
做鸡真好吃 2006-05-09
  • 打赏
  • 举报
回复
关注中~
hchinside 2006-05-09
  • 打赏
  • 举报
回复
楼上正解。mfc程序默认都是利用多线程runtime的,所以必须使用_beginthreadex或者AfxBeginThread,(其实这个函数内部也是调用_beginthreadex的,看一下mfc的thrdcore.cpp就知道了)
不过鉴于你是mfc程序,还是用AfxBeginThread比较好。它内部有一些mfc的处理代码。
不过在使用时,注意AfxBeginThread的参数,一开始要suspend,然后在返回的CThread对象中,把autodelete这个flag设为false,最后再resume让它执行。
因为线程可能一瞬间就好了,这时如果autodelete为true的话,CThread对象自动被delete了,指针就悬空了。同样也就不能再waitforsingleobject了,所以还是自己delete指针比较好
zdjnju 2006-05-09
  • 打赏
  • 举报
回复
1、C++中不要直接使用CreateThread(...),请改用_beginthreadex(...)!不然很可能出错,尤其是使用C库、C++对象等的时候;
2、DWORD WINAPI ThreadFun(LPVOID lpParam)——不要丢掉“WINAPI”!有没有WINAPI,生成的代码是有差别的;

ps. 线程创建好后,并不会立即执行,而是处于就绪态,等待调度。所以,你跟踪的结果并不奇怪。
狂放之歌 2006-05-07
  • 打赏
  • 举报
回复
好多测试啊~
Featured 2006-05-06
  • 打赏
  • 举报
回复
CSDN回复次数限制失效_测试10

测试完毕
Featured 2006-05-06
  • 打赏
  • 举报
回复
CSDN回复次数限制失效_测试9
Featured 2006-05-06
  • 打赏
  • 举报
回复
CSDN回复次数限制失效_测试8
Featured 2006-05-06
  • 打赏
  • 举报
回复
CSDN回复次数限制失效_测试7
Featured 2006-05-06
  • 打赏
  • 举报
回复
CSDN回复次数限制失效_测试6
Featured 2006-05-06
  • 打赏
  • 举报
回复
CSDN回复次数限制失效_测试5
Featured 2006-05-06
  • 打赏
  • 举报
回复
CSDN回复次数限制失效_测试4
Featured 2006-05-06
  • 打赏
  • 举报
回复
CSDN回复次数限制失效_测试3
Featured 2006-05-06
  • 打赏
  • 举报
回复
CSDN回复次数限制失效_测试2
Featured 2006-05-06
  • 打赏
  • 举报
回复
CSDN回复次数限制失效_测试1
Featured 2006-05-06
  • 打赏
  • 举报
回复
debug下看能否进入断点
做鸡真好吃 2006-04-30
  • 打赏
  • 举报
回复
MM~
striking 2006-04-20
  • 打赏
  • 举报
回复
竟然可以多次回复
striking 2006-04-20
  • 打赏
  • 举报
回复
不好玩,还是有点偏
striking 2006-04-20
  • 打赏
  • 举报
回复
DWORD   ThreadFun(LPVOID lpParam); // 线程调用的函数

    |
 WINAPI
striking 2006-04-20
  • 打赏
  • 举报
回复
DWORD   ThreadFun(LPVOID lpParam); // 线程调用的函数

    |
 WINAPI
加载更多回复(9)

15,471

社区成员

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

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