| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2024 人关注过本帖
标题:AfxBeginThread创建线程问题
只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
 问题点数:0 回复次数:5 
AfxBeginThread创建线程问题
A.h
程序代码:
typedef struct tagTEST
{
    int hwnd;
    __int8 A;
    __int8 B;
    __int8 C;
    char *D;
    char *E;
    char *F;
}THREAD_PARAM, *LPTHREAD_PARAM;


B.cpp
程序代码:
extern UINT MyThreadFun( LPVOID lpParam );
int _stdcall ST2MG(int hwnd,__int8 A, __int8 B,__int8 C, char *D, char *E, char *F)
{
    LPTHREAD_PARAM lpParam = new THREAD_PARAM;

    lpParam->hwnd = hwnd;
    lpParam->A= A;
    lpParam->B= B;
    lpParam->C=C;
    lpParam->D=D;
    lpParam->E=E;
    lpParam->F=F;
    
    ::AfxBeginThread(MyThreadFun, lpParam);
    //delete lpParam1;                                                
    return 1;
}
UINT MyThreadFun (LPVOID lpParam)
{
    LPTHREAD_PARAM lpParam1 = (LPTHREAD_PARAM)lpParam;
    THREAD_PARAM stParam;

    stParam.hwnd= lpParam1->hwnd;
    stParam.A= lpParam1->A;
    stParam.B= lpParam1->B;
    stParam.C= lpParam1->C;
    stParam.D= lpParam1->D;
    stParam.E= lpParam1->E;
    stParam.F= lpParam1->F;

    .....


这样写有什么问题吗?
编译是没有错误,但是运行后却会出现错误~
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

关于行程建立有什么地方没写到吗?
2012-03-15 16:06
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
因为我把这两段拿掉就能正常运行~
只是我额外创建行程有其他用途~

不要選我當版主
2012-03-15 16:08
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
貌似抓到问题点了~
::AfxBeginThread(MyThreadFun, lpParam);
之后加上~
程序代码:
if (B==C)
    Sleep(4000);
else
    Sleep(500);

就正常了~
推算应该是行程内容还没跑完就直接return了~
而下一次循环又带一组参数进来~DLL来不及处理就当了~

可是这样改还是有问题~
因为的主函式后面还有3个函式要跑~
奇怪了~行程好像不会等主函式运行结束~
就直接返回值才造成问题~这要怎解决?

不要選我當版主
2012-03-15 18:09
C_戴忠意
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:575
专家分:1349
注 册:2011-10-21
收藏
得分:0 

编程之路定要走完……
2012-03-15 23:21
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
解决了~
创建行程时将行程ID指向一个指针~
当程序完成​​时将指针设为0~
另外再使用While循环判断当指针为0时~
才让AfxBeginThread运行关闭行程的动作~

不要選我當版主
2012-03-16 12:27
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
ERROR STATR的原因是因为自订函式中~
档案太大或其他原因导致无法撷取档案大小~
才跳出的错误讯息~

不要選我當版主
2012-03-16 12:29
快速回复:AfxBeginThread创建线程问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025395 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved