多线程同步问题 多线程同步问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 UINT CRWSock::ThreadProc(LPVOID lp){// _DATA *dat;// dat=(_DATA *)lp; _Thread *dat = (_Thread *)lp; SmList* pList = NULL;// WaitForSingleObject(sem[1],INFINITE); CSingleLock singleLock(&sem); singleLock.Lock(); // Attempt to lock the shared resource if (singleLock.IsLocked()) // Resource has been locked { sec2.Lock(); for(int i=0;i<10;i++) { if(bFlag[i]==true) { dat->i = i ; bFlag[i]= false ; pList = &dat->pList[i]; break; } } sec2.Unlock(); if(i==10) AfxMessageBox("hcl") ; if(pList == NULL) AfxMessageBox("hcl2") ; try { sec.Lock();// g_pListRecv->InsertItem(0,dat->szPhone);// g_pListRecv->SetItemText(0,1,dat->szContent); g_pListRecv->InsertItem(0,dat->data.szPhone); g_pListRecv->SetItemText(0,1,dat->data.szContent); sec.Unlock(); //处理比赛// SmList list;// if(!list.IsConnect())// {// list.Connect();// }// static SmList list[10]; SmList::listMsg msg; strcpy(msg.szMsg,dat->data.szContent); strcpy(msg.szPhone,dat->data.szPhone);// if(!pList->IsConnect())// {// pList->Connect();// } if(pList->SaveRecvMsg(&msg) < 0) {//SaveRecvMsg error! DataBaseError("SaveRecvMsg error!"); bFlag[dat->i] = true ; delete dat; return 0; } bFlag[dat->i] = true ; } catch(...) { AfxMessageBox("Thread SaveRecvMsg exception"); // sec.Lock(); // g_nSectionCount--; // sec.Unlock(); } try { SmTreat treat; SM sm;// strcpy(sm.content,dat->szContent);// strcpy(sm.phone,dat->szPhone); strcpy(sm.content,dat->data.szContent); strcpy(sm.phone,dat->data.szPhone); treat.Treat(sm); } catch(...) { AfxMessageBox("Thread Treat exception"); // sec.Lock(); // g_nSectionCount--; // sec.Unlock(); } singleLock.Unlock(); } delete dat; return 1; } 关于移植activeX到FireFox问题 CFile::Write() 乱码 为什么? 高手请进!关于ATL Activex开发中的标准控件事件接受的问题? 类似MSN Shell的功能如何实现?(有建议者皆有分,分不够会继续增加) 能不能拦截所有网络数据? 为何程序循环中无法触发消息响应函数? DoModal出来的窗口,焦点怎么会回到父窗口上去了?好奇怪啊! 一个关于内存管理的简单问题。 Release版本正常,Debug版本出错? 怎样在VC中输入那些不常用的符号? COM技术内幕:第8章聚合: 编译问题求助 怎样在OnEraseBkgnd()中对背景进行操作啊????
{
// _DATA *dat;
// dat=(_DATA *)lp;
_Thread *dat = (_Thread *)lp;
SmList* pList = NULL;
// WaitForSingleObject(sem[1],INFINITE);
CSingleLock singleLock(&sem);
singleLock.Lock(); // Attempt to lock the shared resource
if (singleLock.IsLocked()) // Resource has been locked
{
sec2.Lock();
for(int i=0;i<10;i++)
{
if(bFlag[i]==true)
{
dat->i = i ;
bFlag[i]= false ;
pList = &dat->pList[i];
break;
}
}
sec2.Unlock();
if(i==10)
AfxMessageBox("hcl") ; if(pList == NULL)
AfxMessageBox("hcl2") ;
try
{
sec.Lock();
// g_pListRecv->InsertItem(0,dat->szPhone);
// g_pListRecv->SetItemText(0,1,dat->szContent);
g_pListRecv->InsertItem(0,dat->data.szPhone);
g_pListRecv->SetItemText(0,1,dat->data.szContent);
sec.Unlock(); //处理比赛
// SmList list;
// if(!list.IsConnect())
// {
// list.Connect();
// }
// static SmList list[10];
SmList::listMsg msg;
strcpy(msg.szMsg,dat->data.szContent);
strcpy(msg.szPhone,dat->data.szPhone);// if(!pList->IsConnect())
// {
// pList->Connect();
// }
if(pList->SaveRecvMsg(&msg) < 0)
{//SaveRecvMsg error!
DataBaseError("SaveRecvMsg error!");
bFlag[dat->i] = true ;
delete dat;
return 0;
}
bFlag[dat->i] = true ;
}
catch(...)
{
AfxMessageBox("Thread SaveRecvMsg exception");
// sec.Lock();
// g_nSectionCount--;
// sec.Unlock();
}
try
{
SmTreat treat; SM sm;
// strcpy(sm.content,dat->szContent);
// strcpy(sm.phone,dat->szPhone);
strcpy(sm.content,dat->data.szContent);
strcpy(sm.phone,dat->data.szPhone);
treat.Treat(sm);
}
catch(...)
{
AfxMessageBox("Thread Treat exception");
// sec.Lock();
// g_nSectionCount--;
// sec.Unlock();
}
singleLock.Unlock();
}
delete dat;
return 1;
}