同一时间只有一个线程对全局变量读和写,不存在同步的问题,主要是线程不安全,会突然改变全局变量的值,我的全局变量是个数组,每个数组的元素又是一个结构,偶尔会把整个数组当中某一两个无素的成员改变成古怪的值,大概30次里有1.2次的样子.
解决方案 »
- 临界区 和 锁 有什么区别?
- 请教一个关于宏的问题
- 请教一个有关类模板的问题
- 请教!怎么样删除coblist内的元素所占的内存,removeall()不行的
- 字体不按照要求显示,请高手们看一下我的代码问题在哪里?
- 求救!!
- 谁知道photoshop里的液体工具(在滤镜菜单里)是如何做的?
- 工程中用到了winsock控件,进行通讯(UDp协议),打包安装到\没有vc的环境中,出现"网络子系统失败的"错误,我少打了那个文件?!!如何解决\????
- 大家好,谁知道关于VC 类方面的书籍方面的网址(中文),谢谢!
- 请问一个临界区实现线程同步的问题
- 祝贺我版大拿cnzdgs当选微软MVP!!!
- 高分求教VS2008中ribbon bar中控件与CView类的交互问题
2. 有没有把CWnd或者它的派生类对象跨线程使用?
3. 是不是把COM对象跨套间使用
4. 是不是有内存访问越界如果你上述都没有,那么你的程序应该安全的。
//这时候dev_info的值没有错。
for (i=m_Dev_count-r; i < m_Dev_count; i++)
{
memcpy(MacAdrs,dev_info[i].hw_info.mac_adrs,6);
nIpAddr=GetIPAddress98();//全局函数
char ipsz[100] = {0};
sprintf(ipsz,"%d.%d.%d.%d",nIpAddr>>24,(nIpAddr>>16)&0xFF,(nIpAddr>>8)&0xFF,nIpAddr&0xFF);
m_devList.SetItemText(i,2,ipsz);
cr = m_devList.SetTextBkColor(CLR_INVALID);
ASSERT(cr!=CLR_INVALID);
m_devList.SetTextBkColor(CLR_INVALID);
}
//运行到这里就错了。全局函数定义:unsigned short s_version;
ULONG ipAddr=0;
short ret = read_data(&g_Adapter,MacAdrs,PKT_TYPE_SETPASSWD_RREQ,PKT_TYPE_SETPASSWD_ACK,\
"", 0,0,0);
switch(ret)
{
case PKT_STAT_NORESPOND:
return 0;
case PKT_STAT_FAIL: //need password
// if(IDOK != passDlg.DoModal())
break;
//return 0;
case PKT_STAT_SUCCESS: //don't need password
break;
}
// BeginWaitCursor();
memset(&NVVars,0,sizeof(NVVars));
short RetVal = read_data(&g_Adapter,MacAdrs2,PKT_TYPE_NVDATA_RREQ,PKT_TYPE_NVDATA_ACK,\
"",0,(unsigned char*)&NVVars,sizeof(struct SD_parms)+12);
ipAddr=ntohl(SysVars.Lan1IP);
if(SysVars.IP_method==1)
{
s_version =ntohs(SysVars.version);
if(s_version>750){
ipAddr=ntohl(SysVars.DhcpIP);
} } return ipAddr;