好奇怪,我明明把这个线程锁定了,但是还是跳出来“123”,大家看看是怎么回事?
CEvent eventExcel;
CNetWatcherViewerDoc::CNetWatcherViewerDoc()
{
CWinThread *m_pExcelThread=AfxBeginThread(ConstructExcel,this);
if(m_pExcelThread==NULL){
AfxMessageBox("创建Excel文件失败!");
}
eventExcel.Lock();
}UINT ConstructExcel(LPVOID pParam)
{
::AfxMessageBox("123");
return 0;
}
CEvent eventExcel;
CNetWatcherViewerDoc::CNetWatcherViewerDoc()
{
CWinThread *m_pExcelThread=AfxBeginThread(ConstructExcel,this);
if(m_pExcelThread==NULL){
AfxMessageBox("创建Excel文件失败!");
}
eventExcel.Lock();
}UINT ConstructExcel(LPVOID pParam)
{
::AfxMessageBox("123");
return 0;
}
但是看代码,好像没什么东西能阻止AfxMessageBox("123");,它是在子线程里运行的,你lock的是主线程?
这不是锁线程吗?
CWinThread *m_pExcelThread=AfxBeginThread(ConstructExcel,this);
if(m_pExcelThread==NULL){
AfxMessageBox("创建Excel文件失败!");
}
eventExcel.Lock();
CWinThread *m_pStoreThread=AfxBeginThread(Storedata,this);
if(m_pStoreThread==NULL){
AfxMessageBox("保存失败!");
}
//::WaitForSingleObject(eventStore.m_hObject,0);//等待接收线程 // start sub recv thread
eventStore.Lock(); m_pRecvThread=AfxBeginThread(Recvdata,this);
if(m_pRecvThread==NULL){
AfxMessageBox("监听失败!");
}
eventReceive.Lock();
这三个线程哪个放在最前面就不能锁定,到底是怎么回事呢?请高手来解释一下,谢谢
这个不是锁线程,只是重置codeeventExcel事件. 如果有线程等待这个事件的话会被锁住.
但是没有看到你有任何代码将你的线程和这个codeeventExcel关联起来
CWinThread *m_pExcelThread=AfxBeginThread(ConstructExcel,this);
if(m_pExcelThread==NULL){
AfxMessageBox("创建Excel文件失败!");
}
eventExcel.Lock();可以用“异步”理解:AfxBeginThread是立即返回的,所以有两种可能情况,
1)当执行到eventExcel.Lock();时,线程已经运行或运行完毕。
2) 当执行到eventExcel.Lock();时,线程没有运行。再说,Lock是锁定临界区代码的,限制多个线程同时访问一个数据。
1. eventExcel.Lock必须在AfxBeginThread之前调用,因为线程一旦创建就会立刻运行,可能在你想锁它的时候,线程已经执行完了
2. 在子线程内必须也来获得这个锁。否则你在主线程里上个锁,凭什么去影响子线程那?