我在程序定义了一个类,在类中创建了一个线程,并传递给线程这个类的指针this,然后线程中的所有处理都用这个指针来访问这个类的成员函数,但奇怪的是当我在一个类成员函数(这个成员函数被这个线程所调用)中定义了一个static int dd的变量,同时在另一个类成员函数(这个成员函数被这个线程所调用)也定义了一个static buff[32];当线程写过buff后,dd的值就被改变了,变成一个负数,我怀疑线程的heap被改写了,但不知道是怎么引起的,请高手指教。
解决方案 »
- clistctrl的checkbox的位置
- 窗体分割后,可以通过UpdateAllViews(this)来更新所有,现在需要更新指定的一个
- 怎样删除工具栏上的分隔符?怎么只能添加不能删呀?
- 如何修改程序的版本号为1.0.01.01110格式
- vc,如何捕获或者说自己处理MDI程序主菜单中的,文件中的打开,新建,关闭,保存等命令消息?我这样做为什么不行?
- vc 数据库记录的添加和更新问题
- 谁 能推荐一本 计算机图形学的书?要很基础的那种
- 请教高手网络通讯问题!
- 进程之间互相传递消息?来者有分!!!
- 哪位大侠可提供一个用nt service实现多线程的socket通讯服务器端的例程
- 响应村长号召坚决鄙视鸟人
- 请问多媒体广告需要学习那些东西?
其中的资源就是你的所谓静态变量.
最简单高效的办法就是用临界区将这个资源保护起来.
因为临界区不是内核对象,程序运行时不用从用户态到内核态的切换,
所以在线程同步技术中是较率比较高的方式.
1.创建一个全局临界区
CRITICAL_SECTION m_criticalSection;
InitializeCriticalSection(&m_criticalSection);
2.访问保护
::EnterCriticalSection(&m_criticalSection);
//在这里操作你的静态变量.
::LeaveCriticalSection(&m_criticalSection);
3.程序退出时关闭临界区
DeleteCriticalSection(&m_criticalSection);