注册 登录
编程论坛 VC++/MFC

AfxBeginThread创建线程问题

wube 发布于 2012-03-15 16:06, 2036 次点击
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;

    .....


这样写有什么问题吗?
编译是没有错误,但是运行后却会出现错误~
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

关于行程建立有什么地方没写到吗?
5 回复
#2
wube2012-03-15 16:08
因为我把这两段拿掉就能正常运行~
只是我额外创建行程有其他用途~
#3
wube2012-03-15 18:09
貌似抓到问题点了~
::AfxBeginThread(MyThreadFun, lpParam);
之后加上~
程序代码:

if (B==C)
    Sleep(4000);
else
    Sleep(500);

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

可是这样改还是有问题~
因为的主函式后面还有3个函式要跑~
奇怪了~行程好像不会等主函式运行结束~
就直接返回值才造成问题~这要怎解决?
#4
C_戴忠意2012-03-15 23:21
#5
wube2012-03-16 12:27
解决了~
创建行程时将行程ID指向一个指针~
当程序完成​​时将指针设为0~
另外再使用While循环判断当指针为0时~
才让AfxBeginThread运行关闭行程的动作~
#6
wube2012-03-16 12:29
ERROR STATR的原因是因为自订函式中~
档案太大或其他原因导致无法撷取档案大小~
才跳出的错误讯息~
1