在多线程当中,对于同一个资源的操作应该通过临界区来操作,你这里定义的这个CMapPtrToPtr指针是一个静态指针,在进程中访问之前应该先通过一个临界区控制一下,同时只能保证有一个线程在访问该变量就可以了。如果不用临界区,程序运行将是不可见的,会出错。
解决方案 »
- menu的问题
- suanfa1.exe 中的 0x773715de 处有未经处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- 【求思路】两个数组相比较,保存不相等的元素
- 05下一个错误!!!!!
- 如何检测某串口设备
- 大家帮忙看看啊?我用163的smtp服务器在验证是提示错误535: authentication failed是怎么回事啊
- 外语对于程序员重要吗?大家进来谈谈感受
- 请问怎样设置Static(静态文本框)的背景色?
- 如何用VC开发控件?
- 声音存储问题,请帮忙!(我才做声音,请多关照)
- 是我没用好,还是bug... ,请进!
- 大散分!kevin_qing或大虾们有谁有过用wingate调试socks5 rfc1929的成功经验??最近太苦闷了:~(
问题现在不是出在这里,这个是出错时的DEBUG显示代码,我不知道是哪个变量有错啊,
我在线程里用了 NEW CPOP3 类,里面有变量的,只要一启动线程就会出错的,但是线程的初始化都没有任何问题,不返回NULL,执行到线程的同步时就出错了,CPOP3类如下:
#include <afxsock.h>
#include "MailMessage.h"#define POP3_PORT 110 // Standard port for POP3 servers
#define RESPONSE_BUFFER_SIZE 1024class CPOP3
{
public:
int outerror;
CPOP3( LPCTSTR szPOP3ServerName, UINT nPort = POP3_PORT, LPCTSTR sUsername = NULL, LPCTSTR sPassword = NULL );
virtual ~CPOP3();
void SetServerProperties( LPCTSTR sServerHostName, UINT nPort = POP3_PORT );
void SetUserProperties( LPCTSTR sUsername, LPCTSTR sPassword );
CString GetLastError();
UINT GetPort();
CString GetServerHostName();
CString GetUsername();
CString GetPassword();
BOOL Disconnect();
BOOL Connect();
int GetNumMessages();private:
BOOL get_response( UINT executed_action ); CString m_sError;
CString m_sResponse;
BOOL m_bConnected;
public:
UINT m_nPort;
private:
CString m_sPOP3ServerHostName;
CString m_sUsername;
CString m_sPassword;
CSocket m_wsPOP3Server;protected:
enum eResponse
{
CONNECTION = 0,
IDENTIFICATION,
AUTHENTIFICATION,
STATUS,
RETRIEVE,
DELE,
QUIT,
LAST_RESPONSE };
TCHAR response_buf[ RESPONSE_BUFFER_SIZE ];};
而且我将线程函数定义为已经FRIEND类型了
你可以先去掉它试验一下