线程使用类变量的问题

zhaogaojian 2006-10-03 06:34:31
建一个类CMyClass
#pragma once

class CMyClass
{
public:
CMyClass(void);
public:
~CMyClass(void);
public:
char localfilepath[256];
int Fun(void);
int Test(void);
};

#include "StdAfx.h"
#include "MyClass.h"
UINT ReceiveThread(LPVOID pParam);

CMyClass::CMyClass(void)
{
}

CMyClass::~CMyClass(void)
{
}
UINT ReceiveThread(LPVOID pParam)
{
CMyClass* pMyClass=(CMyClass*)pParam;
pMyClass->Fun();
return 0;
}

int CMyClass::Fun(void)
{ //char localfilepath[256];
CString filename;
filename.Format("c:\\jl\\%d.arj",1);
memcpy_s(localfilepath,_MAX_PATH,filename,filename.GetLength());
localfilepath[filename.GetLength()]=0x00;
AfxMessageBox(localfilepath);
return 0;
}
int CMyClass::Test(void)
{
AfxBeginThread(ReceiveThread,this,THREAD_BASE_PRIORITY_MIN);
return 0;
}

然后在一个对话框放一个按钮调用这个线程函数

void CtestDlg::OnBnClickedButton1()
{
CMyClass m_class;
m_class.Test();
}
此程序在VC6.0下运行正常,但在VC2003,VC2005下,有时localfilepath有时会变成乱码,
最典型的是用鼠标单击按钮执行函数正常,用回车键AfxMessageBox一句100%是乱码。但
localfilepath声明成全局变量或局部变量没有一点问题
...全文
308 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxshzf 2006-10-24
  • 打赏
  • 举报
回复
路过
zhaogaojian 2006-10-04
  • 打赏
  • 举报
回复
Mackz(在相互)所说的局部变量问题有可能,可能线程执行在类销毁之后,我去公司再试试
zhaogaojian 2006-10-04
  • 打赏
  • 举报
回复
我把代码放到
http://www.vsfan.net/test.rar

这个项目使用6.0建的,大家用vc2003或者vc2005打开执行那个按钮函数就可以发现问题了
zhaogaojian 2006-10-04
  • 打赏
  • 举报
回复
和unicode 宏一点关系都没有,如果localfilepath是局部变量,或者全局变量都运行正常,可是
类变量不行,各位达人随便建个工程试一下,比如说我用鼠标点击按钮弹出一个对话框,用键盘点按钮是另一种效果,我快郁闷死了
jixingzhong 2006-10-04
  • 打赏
  • 举报
回复
难道是 unicode 定义没有清除干净 ?
jixingzhong 2006-10-04
  • 打赏
  • 举报
回复
_T() 既然确定了不使用 unicode 宏,
不用 _T() 也不是问题 ....
longge520 2006-10-04
  • 打赏
  • 举报
回复
路过
Stefine 2006-10-04
  • 打赏
  • 举报
回复
测试了下,确实如此
VC6下完全正常,但2003下回车时便为空了

关注
kwer 2006-10-04
  • 打赏
  • 举报
回复
在我这里编译运行都没问题


菜牛 2006-10-03
  • 打赏
  • 举报
回复
字符串都用_T()括起来,另外,貌似这个m_class是局部变量。
zhaogaojian 2006-10-03
  • 打赏
  • 举报
回复
不是的,我已经把unicode选项去掉了,而且.net2003下也有这个问题,很奇怪
luolovegui 2006-10-03
  • 打赏
  • 举报
回复
本人太懒,不想测试,如果没想错的话,应该是编码问题,如.net2005是unicode编码的.所以AfxMessageBox应该是wchar_t*类型.
zhaogaojian 2006-10-03
  • 打赏
  • 举报
回复
是不是.net2003,.net2005的Bug,期待高手回答

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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