线程创建中遇见的几个问题及解决方法
2013-09-16 17:39
232 查看
1. 客户端程序CListCtrl.DeleteAllItems()出现error C2018: unknown character '0xa1'
原因:0xa1已经大于127了,不是标准的ASCII字符了
解决:删除代码里的全角字符(删除该条代码,重写)
2. 在主程序需定义新的CString类变量,对其进行赋值时,出现CX00000005 Access Violation
解决办法:在引用该类的主函数构造函数中声明该变量,如果定义为指针类型,需在声明时为
其分配指定的栈空间。 m_pFT = new FileTransmitter;
3. 关于线程创建时多个参数的传递问题
可以使用结构体将需要传递放入多个参数同时进行传递,但如果将该结构体定义为局部变量的话,
在线程调用该参数时,往往会找不到该参数。原因在于该参数在传递时是在栈上创建的,因此当线程
函数调用时该参数可能已经被释放。因此这是时就需要创建全局的静态变量来实现,同时最好的方法
是在堆上为该变量分配内存空间,这样变量在程序运行期间都是存在的,只需要在程序退出时需要对该
存储空间进行释放,以免造成内存泄露。
例如当传递struct var{int i1; long l2; char c3};
void fun1()
{
var* pVar = new var;
///.........对pVar赋值
HANDLE h;
DWORD dw;
CreateThread(NULL,0,ThreadProc,pVar,0,&id)
}
DWORD MyClass::ThreadProc(LPVOID lp)
{
var* pvar = (var*)lp;
/////..........对该参数进行操作
delete pvar; ////////释放内存空间
pvar = NULL;
return 0;
}
原因:0xa1已经大于127了,不是标准的ASCII字符了
解决:删除代码里的全角字符(删除该条代码,重写)
2. 在主程序需定义新的CString类变量,对其进行赋值时,出现CX00000005 Access Violation
解决办法:在引用该类的主函数构造函数中声明该变量,如果定义为指针类型,需在声明时为
其分配指定的栈空间。 m_pFT = new FileTransmitter;
3. 关于线程创建时多个参数的传递问题
可以使用结构体将需要传递放入多个参数同时进行传递,但如果将该结构体定义为局部变量的话,
在线程调用该参数时,往往会找不到该参数。原因在于该参数在传递时是在栈上创建的,因此当线程
函数调用时该参数可能已经被释放。因此这是时就需要创建全局的静态变量来实现,同时最好的方法
是在堆上为该变量分配内存空间,这样变量在程序运行期间都是存在的,只需要在程序退出时需要对该
存储空间进行释放,以免造成内存泄露。
例如当传递struct var{int i1; long l2; char c3};
void fun1()
{
var* pVar = new var;
///.........对pVar赋值
HANDLE h;
DWORD dw;
CreateThread(NULL,0,ThreadProc,pVar,0,&id)
}
DWORD MyClass::ThreadProc(LPVOID lp)
{
var* pvar = (var*)lp;
/////..........对该参数进行操作
delete pvar; ////////释放内存空间
pvar = NULL;
return 0;
}
相关文章推荐
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~ 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
- Java中创建线程的两个方法____解决火车票或售票问题
- 多线程委托之跨线程问题分析--在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(解决方法已更新)
- 黑马程序员-解决系统报错“线程间操作无效: 从不是创建控件" txtbox1" 的线程访问它”问题的方法
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- Java线程安全问题及线程安全解决方法
- 移动Web开发中遇见的问题以及解决方法(不断更新中)
- 解决JSP中文显示问题的几个方法
- 关于allegro16.6 orCAD capture CIS 创建网表出现错误的问题解决方法
- jquery 缓存问题的几个解决方法
- [原创]SQL Server 2005:一个使用新创建的User的问题和解决方法
- 安装Mysql提示1045错误解决方法(这个问题我纠结好几个小时,终于解决了!)
- 几个问题及解决方法
- 安装Sql Server 2008,遇到的无权限创建数据库、修改身份验证模式等问题的原因及解决方法
- 关于html+ashx开发中几个问题的解决方法
- 【问题解决】线程间操作无效:从不是创建控件“textBox1”的线程访问它
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- 关于html+ashx开发中几个问题的解决方法
- SQLServer2008中 “不允许保存更改.您所做的更改要求删除并重新创建以下表”问题解决方法