summaryrefslogtreecommitdiffabout
path: root/DipstickDlg.cpp
Unidiff
Diffstat (limited to 'DipstickDlg.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--DipstickDlg.cpp62
1 files changed, 52 insertions, 10 deletions
diff --git a/DipstickDlg.cpp b/DipstickDlg.cpp
index ace2aff..f27b219 100644
--- a/DipstickDlg.cpp
+++ b/DipstickDlg.cpp
@@ -84,78 +84,81 @@ WORD hi,lo;
84 lo=app->GetProfileInt("Options","IntervalLo",LOWORD(m_Interval)); 84 lo=app->GetProfileInt("Options","IntervalLo",LOWORD(m_Interval));
85 m_Interval=MAKELONG(lo,hi); 85 m_Interval=MAKELONG(lo,hi);
86 m_MaxThreads=app->GetProfileInt("Options","MaxThreads",m_MaxThreads); 86 m_MaxThreads=app->GetProfileInt("Options","MaxThreads",m_MaxThreads);
87 m_PingSize=app->GetProfileInt("Options","PingSize",m_PingSize); 87 m_PingSize=app->GetProfileInt("Options","PingSize",m_PingSize);
88 m_PingsPerHost=app->GetProfileInt("Options","PingsPerHost",m_PingsPerHost); 88 m_PingsPerHost=app->GetProfileInt("Options","PingsPerHost",m_PingsPerHost);
89 m_SortCriteria=app->GetProfileInt("Options","SortBy",m_SortCriteria); 89 m_SortCriteria=app->GetProfileInt("Options","SortBy",m_SortCriteria);
90 hi=app->GetProfileInt("Options","TimeOutHi",HIWORD(m_TimeOut)); 90 hi=app->GetProfileInt("Options","TimeOutHi",HIWORD(m_TimeOut));
91 lo=app->GetProfileInt("Options","TimeOutLo",LOWORD(m_TimeOut)); 91 lo=app->GetProfileInt("Options","TimeOutLo",LOWORD(m_TimeOut));
92 m_TimeOut=MAKELONG(lo,hi); 92 m_TimeOut=MAKELONG(lo,hi);
93 m_bMSWorkAround = app->GetProfileInt("Options","InnermostURL",m_bMSWorkAround); 93 m_bMSWorkAround = app->GetProfileInt("Options","InnermostURL",m_bMSWorkAround);
94 m_bAutoBest = app->GetProfileInt("Options","AutoBest",m_bAutoBest); 94 m_bAutoBest = app->GetProfileInt("Options","AutoBest",m_bAutoBest);
95 m_bSmartAdjust = app->GetProfileInt("Options","SmartAdjust",m_bSmartAdjust); 95 m_bSmartAdjust = app->GetProfileInt("Options","SmartAdjust",m_bSmartAdjust);
96 m_bAdjustInnermost = app->GetProfileInt("Options","AdjustInnermost",m_bAdjustInnermost); 96 m_bAdjustInnermost = app->GetProfileInt("Options","AdjustInnermost",m_bAdjustInnermost);
97 m_bIgnorelative = app->GetProfileInt("Options","IgnoreRelative",m_bIgnorelative); 97 m_bIgnorelative = app->GetProfileInt("Options","IgnoreRelative",m_bIgnorelative);
98 m_impexPath = app->GetProfileString("Options","ImportExportPath",m_impexPath); 98 m_impexPath = app->GetProfileString("Options","ImportExportPath",m_impexPath);
99 //{{AFX_DATA_INIT(CDipstickDlg) 99 //{{AFX_DATA_INIT(CDipstickDlg)
100 //}}AFX_DATA_INIT 100 //}}AFX_DATA_INIT
101 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 101 // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
102 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 102 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
103 m_bmpBack.LoadBitmap(IDB_DIABACK); 103 m_bmpBack.LoadBitmap(IDB_DIABACK);
104 m_bmpBack.GetBitmap(&m_bitmapBack); 104 m_bmpBack.GetBitmap(&m_bitmapBack);
105CString tmp; 105CString tmp;
106 VERIFY(tmp.LoadString(IDS_REGEX_HTMLURL)); 106 VERIFY(tmp.LoadString(IDS_REGEX_HTMLURL));
107 VERIFY(m_reHTMLURL.Compile(tmp,CRegEx::regExtended|CRegEx::regIgnoreCase)); 107 VERIFY(m_reHTMLURL.Compile(tmp,CRegEx::regExtended|CRegEx::regIgnoreCase));
108 VERIFY(tmp.LoadString(IDS_REGEX_URL));
109 VERIFY(m_reURL.Compile(tmp,CRegEx::regExtended|CRegEx::regIgnoreCase));
108} 110}
109 111
110CDipstickDlg::~CDipstickDlg() 112CDipstickDlg::~CDipstickDlg()
111{ 113{
112} 114}
113 115
114void CDipstickDlg::DoDataExchange(CDataExchange* pDX) 116void CDipstickDlg::DoDataExchange(CDataExchange* pDX)
115{ 117{
116 CDialog::DoDataExchange(pDX); 118 CDialog::DoDataExchange(pDX);
117 //{{AFX_DATA_MAP(CDipstickDlg) 119 //{{AFX_DATA_MAP(CDipstickDlg)
118 DDX_Control(pDX, IDC_ADVANCED, m_AdvancedCtl); 120 DDX_Control(pDX, IDC_ADVANCED, m_AdvancedCtl);
119 DDX_Control(pDX, ID_HELP, m_HelpCtl); 121 DDX_Control(pDX, ID_HELP, m_HelpCtl);
120 DDX_Control(pDX, IDC_EXIT, m_ExitCtl); 122 DDX_Control(pDX, IDC_EXIT, m_ExitCtl);
121 DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl); 123 DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl);
122 DDX_Control(pDX, IDC_MANUALPING, m_ManualPingCtl); 124 DDX_Control(pDX, IDC_MANUALPING, m_ManualPingCtl);
123 DDX_Control(pDX, IDC_REMOVE, m_RemoveCtl); 125 DDX_Control(pDX, IDC_REMOVE, m_RemoveCtl);
124 DDX_Control(pDX, IDC_REPINGALL, m_RepingAllCtl); 126 DDX_Control(pDX, IDC_REPINGALL, m_RepingAllCtl);
125 DDX_Control(pDX, IDC_REPING, m_RepingCtl); 127 DDX_Control(pDX, IDC_REPING, m_RepingCtl);
126 DDX_Control(pDX, IDC_CLEAR, m_ClearListCtl); 128 DDX_Control(pDX, IDC_CLEAR, m_ClearListCtl);
127 DDX_Control(pDX, IDC_HOSTLIST, m_HostList); 129 DDX_Control(pDX, IDC_HOSTLIST, m_HostList);
128 //}}AFX_DATA_MAP 130 //}}AFX_DATA_MAP
129} 131}
130 132
131BEGIN_MESSAGE_MAP(CDipstickDlg, CDialog) 133BEGIN_MESSAGE_MAP(CDipstickDlg, CDialog)
132 //{{AFX_MSG_MAP(CDipstickDlg) 134 //{{AFX_MSG_MAP(CDipstickDlg)
133 ON_WM_SYSCOMMAND() 135 ON_WM_SYSCOMMAND()
134 ON_WM_PAINT() 136 ON_WM_PAINT()
135 ON_WM_QUERYDRAGICON() 137 ON_WM_QUERYDRAGICON()
136 ON_WM_DESTROY() 138 ON_WM_DESTROY()
137 ON_BN_CLICKED(IDC_OPTIONS, OnOptions) 139 ON_BN_CLICKED(IDC_OPTIONS, OnOptions)
140 ON_MESSAGE(WM_DNP_URLSPING, OnURLSPing)
138 ON_MESSAGE(WM_DNP_URLPING, OnUrlPing) 141 ON_MESSAGE(WM_DNP_URLPING, OnUrlPing)
139 ON_MESSAGE(WM_DNP_ACTIVITYCOUNT, OnActivityCount) 142 ON_MESSAGE(WM_DNP_ACTIVITYCOUNT, OnActivityCount)
140 ON_MESSAGE(WM_DNP_UPDATEHOSTDATA, OnUpdateHostData) 143 ON_MESSAGE(WM_DNP_UPDATEHOSTDATA, OnUpdateHostData)
141 ON_MESSAGE(WM_DNP_HTML, OnHTMLTransfer) 144 ON_MESSAGE(WM_DNP_HTML, OnHTMLTransfer)
142 ON_NOTIFY(LVN_COLUMNCLICK, IDC_HOSTLIST, OnColumnclickHostlist) 145 ON_NOTIFY(LVN_COLUMNCLICK, IDC_HOSTLIST, OnColumnclickHostlist)
143 ON_WM_WINDOWPOSCHANGING() 146 ON_WM_WINDOWPOSCHANGING()
144 ON_COMMAND(ID_DRAGPAD_OPTIONS, OnDragpadOptions) 147 ON_COMMAND(ID_DRAGPAD_OPTIONS, OnDragpadOptions)
145 ON_COMMAND(ID_DRAGPAD_SHOWMAINWINDOW, OnDragpadShowmainwindow) 148 ON_COMMAND(ID_DRAGPAD_SHOWMAINWINDOW, OnDragpadShowmainwindow)
146 ON_COMMAND(ID_DRAGPAD_HELP, OnDragpadHelp) 149 ON_COMMAND(ID_DRAGPAD_HELP, OnDragpadHelp)
147 ON_COMMAND(ID_DRAGPAD_ABOUT, OnDragpadAbout) 150 ON_COMMAND(ID_DRAGPAD_ABOUT, OnDragpadAbout)
148 ON_COMMAND(ID_DRAGPAD_EXIT, OnDragpadExit) 151 ON_COMMAND(ID_DRAGPAD_EXIT, OnDragpadExit)
149 ON_BN_CLICKED(IDC_MANUALPING, OnManualping) 152 ON_BN_CLICKED(IDC_MANUALPING, OnManualping)
150 ON_COMMAND(ID_DRAGPAD_MANUALPING, OnDragpadManualping) 153 ON_COMMAND(ID_DRAGPAD_MANUALPING, OnDragpadManualping)
151 ON_COMMAND(ID_DRAGPAD_REPINGALL, OnDragpadRepingAll) 154 ON_COMMAND(ID_DRAGPAD_REPINGALL, OnDragpadRepingAll)
152 ON_COMMAND(ID_DRAGPAD_REMOVEALL, OnDragpadRemoveAll) 155 ON_COMMAND(ID_DRAGPAD_REMOVEALL, OnDragpadRemoveAll)
153 ON_BN_CLICKED(IDC_REPING, OnReping) 156 ON_BN_CLICKED(IDC_REPING, OnReping)
154 ON_BN_CLICKED(IDC_REPINGALL, OnRepingall) 157 ON_BN_CLICKED(IDC_REPINGALL, OnRepingall)
155 ON_BN_CLICKED(IDC_CLEAR, OnClear) 158 ON_BN_CLICKED(IDC_CLEAR, OnClear)
156 ON_NOTIFY(LVN_INSERTITEM, IDC_HOSTLIST, OnInsertitemHostlist) 159 ON_NOTIFY(LVN_INSERTITEM, IDC_HOSTLIST, OnInsertitemHostlist)
157 ON_NOTIFY(LVN_DELETEITEM, IDC_HOSTLIST, OnDeleteitemHostlist) 160 ON_NOTIFY(LVN_DELETEITEM, IDC_HOSTLIST, OnDeleteitemHostlist)
158 ON_NOTIFY(LVN_DELETEALLITEMS, IDC_HOSTLIST, OnDeleteallitemsHostlist) 161 ON_NOTIFY(LVN_DELETEALLITEMS, IDC_HOSTLIST, OnDeleteallitemsHostlist)
159 ON_BN_CLICKED(IDC_EXIT, OnExit) 162 ON_BN_CLICKED(IDC_EXIT, OnExit)
160 ON_NOTIFY(LVN_ITEMCHANGED, IDC_HOSTLIST, OnItemchangedHostlist) 163 ON_NOTIFY(LVN_ITEMCHANGED, IDC_HOSTLIST, OnItemchangedHostlist)
161 ON_BN_CLICKED(IDC_REMOVE, OnRemove) 164 ON_BN_CLICKED(IDC_REMOVE, OnRemove)
@@ -1164,120 +1167,159 @@ UINT cfNIF = RegisterClipboardFormat("Netscape Image Format");
1164 break; 1167 break;
1165 if(!(subs=strstr(lps,strSourceURL))) 1168 if(!(subs=strstr(lps,strSourceURL)))
1166 break; 1169 break;
1167 subs = &subs[strlen(strSourceURL)]; 1170 subs = &subs[strlen(strSourceURL)];
1168 LPTSTR eol = strchr(subs,'\r'); 1171 LPTSTR eol = strchr(subs,'\r');
1169 if(!eol) 1172 if(!eol)
1170 break; 1173 break;
1171 (*eol)=0; 1174 (*eol)=0;
1172 CString sourceURL = subs; 1175 CString sourceURL = subs;
1173 if(!sourceURL.GetLength()) 1176 if(!sourceURL.GetLength())
1174 break; 1177 break;
1175 TRACE0("SourceURL = "+sourceURL+"\n"); 1178 TRACE0("SourceURL = "+sourceURL+"\n");
1176 _xferHTML* xf = new _xferHTML; 1179 _xferHTML* xf = new _xferHTML;
1177 VERIFY(xf->src.Crack(sourceURL)); 1180 VERIFY(xf->src.Crack(sourceURL));
1178 LPTSTR htmlBuff = xf->html.GetBuffer(endSelection-startSelection+2); 1181 LPTSTR htmlBuff = xf->html.GetBuffer(endSelection-startSelection+2);
1179 ASSERT(htmlBuff); 1182 ASSERT(htmlBuff);
1180 memmove(htmlBuff,&lps[startSelection],endSelection-startSelection+1); 1183 memmove(htmlBuff,&lps[startSelection],endSelection-startSelection+1);
1181 htmlBuff[endSelection-startSelection+1]=0; 1184 htmlBuff[endSelection-startSelection+1]=0;
1182 xf->html.ReleaseBuffer(); 1185 xf->html.ReleaseBuffer();
1183 if(bTestOnly){ 1186 if(bTestOnly){
1184 rv = m_reHTMLURL.Match(xf->html); 1187 rv = m_reHTMLURL.Match(xf->html);
1185 delete xf; 1188 delete xf;
1186 }else{ 1189 }else{
1187 PostMessage(WM_DNP_HTML,0,(LPARAM)xf); 1190 PostMessage(WM_DNP_HTML,0,(LPARAM)xf);
1191 rv = TRUE;
1188 } 1192 }
1189 }while(FALSE); 1193 }while(FALSE);
1190 GlobalUnlock(hg); 1194 GlobalUnlock(hg);
1191 GlobalFree(hg); 1195 GlobalFree(hg);
1192 return rv; 1196 return rv;
1193 } 1197 }
1194 if(pDO->IsDataAvailable(cfNIF)){ 1198 if(pDO->IsDataAvailable(cfNIF)){
1195 if(!bTestOnly){ 1199 if(!bTestOnly){
1196 HGLOBAL hg = pDO->GetGlobalData(cfNIF); 1200 HGLOBAL hg = pDO->GetGlobalData(cfNIF);
1197 ASSERT(hg); 1201 ASSERT(hg);
1198 LPVOID lpv = GlobalLock(hg); 1202 LPVOID lpv = GlobalLock(hg);
1199 ASSERT(lpv); 1203 ASSERT(lpv);
1200 struct _nif{ 1204 struct _nif{
1201 BYTE data[0x20]; 1205 BYTE data[0x20];
1202 DWORD m_offDescr; 1206 DWORD m_offDescr;
1203 DWORD m_offURL; 1207 DWORD m_offURL;
1204 DWORD m_offToImage; 1208 DWORD m_offToImage;
1205 } *nif = (_nif*)lpv; 1209 } *nif = (_nif*)lpv;
1206 PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)&nif->data[nif->m_offURL])); 1210 PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)&nif->data[nif->m_offURL]));
1207 GlobalUnlock(hg); 1211 GlobalUnlock(hg);
1208 GlobalFree(hg); 1212 GlobalFree(hg);
1209 } 1213 }
1210 return TRUE; 1214 return TRUE;
1211 } 1215 }
1212 if(pDO->IsDataAvailable(CF_TEXT)){ 1216 if(pDO->IsDataAvailable(CF_TEXT)){
1213 if(!bTestOnly){ 1217 BOOL rv = FALSE;
1214 HGLOBAL hg = pDO->GetGlobalData(CF_TEXT); 1218 HGLOBAL hg = pDO->GetGlobalData(CF_TEXT);
1215 ASSERT(hg); 1219 ASSERT(hg);
1216 LPVOID lpv = GlobalLock(hg); 1220 LPVOID lpv = GlobalLock(hg);
1217 ASSERT(lpv); 1221 ASSERT(lpv);
1218 PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)lpv)); 1222 if(bTestOnly){
1219 GlobalUnlock(hg); 1223 rv = m_reURL.Match((LPCSTR)lpv);
1220 GlobalFree(hg); 1224 }else{
1225 CString sel = (LPCSTR)lpv;
1226 if(m_reURL.Match(sel)) {
1227 rv = TRUE;
1228 CString tmp = m_reURL.GetMatch(CRegEx::matchPostMatch);
1229 if(m_reURL.Match(tmp)) {
1230 PostMessage(WM_DNP_URLSPING,0,(LPARAM)new CString((LPCSTR)lpv));
1231 }else{
1232 PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)lpv));
1233 }
1234 }
1221 } 1235 }
1222 return TRUE; 1236 GlobalUnlock(hg);
1237 GlobalFree(hg);
1238 return rv;
1223 } 1239 }
1224 return FALSE; 1240 return FALSE;
1225} 1241}
1226 1242
1227LRESULT CDipstickDlg::OnHTMLTransfer(WPARAM wP, LPARAM lP) 1243LRESULT CDipstickDlg::OnHTMLTransfer(WPARAM wP, LPARAM lP)
1228{ 1244{
1229_xferHTML* xf = (_xferHTML*)lP; 1245_xferHTML* xf = (_xferHTML*)lP;
1230CSelectURLsDlg su; 1246CSelectURLsDlg su;
1231 su.m_bAdjust = m_bSmartAdjust; 1247 su.m_bAdjust = m_bSmartAdjust;
1232 su.m_bAdjustInnermost = m_bAdjustInnermost; 1248 su.m_bAdjustInnermost = m_bAdjustInnermost;
1233 BeginWaitCursor(); 1249 BeginWaitCursor();
1234 while(m_reHTMLURL.Match(xf->html)){ 1250 while(m_reHTMLURL.Match(xf->html)){
1235 CString url = m_reHTMLURL.GetMatch(1); 1251 CString url = m_reHTMLURL.GetMatch(1);
1236 xf->html = m_reHTMLURL.GetMatch(CRegEx::matchPostMatch); 1252 xf->html = m_reHTMLURL.GetMatch(CRegEx::matchPostMatch);
1237 if(CCrackURL::GetHostName(url)==url){ 1253 if(CCrackURL::GetHostName(url)==url){
1238 if(m_bIgnorelative) 1254 if(m_bIgnorelative)
1239 continue; 1255 continue;
1240 CCrackURL cracked; 1256 CCrackURL cracked;
1241 VERIFY(cracked.Crack(url)); 1257 VERIFY(cracked.Crack(url));
1242 cracked.Adjust(xf->src); 1258 cracked.Adjust(xf->src);
1243 url = cracked.Build(); 1259 url = cracked.Build();
1244 } 1260 }
1245 if(!su.m_URLs.Find(url)) 1261 if(!su.m_URLs.Find(url))
1246 VERIFY(su.m_URLs.AddTail(url)); 1262 VERIFY(su.m_URLs.AddTail(url));
1247 } 1263 }
1248 EndWaitCursor(); 1264 EndWaitCursor();
1249 delete xf; 1265 delete xf;
1250 if(su.DoModal()==IDOK){ 1266 if(su.DoModal()==IDOK){
1251 POSITION p = su.m_URLs.GetHeadPosition(); 1267 POSITION p = su.m_URLs.GetHeadPosition();
1252 while(p){ 1268 while(p){
1253 CString url = su.m_URLs.GetNext(p); 1269 CString url = su.m_URLs.GetNext(p);
1254 PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString(url)); 1270 PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString(url));
1255 } 1271 }
1256 } 1272 }
1257 return 0; 1273 return 0;
1258} 1274}
1259 1275
1276LRESULT CDipstickDlg::OnURLSPing(WPARAM wP,LPARAM lP)
1277{
1278CString *sel = (CString*)lP;
1279TRACE1("URLS: %s\n",(LPCTSTR)*sel);
1280CSelectURLsDlg su;
1281 su.m_bAdjust = m_bSmartAdjust;
1282 su.m_bAdjustInnermost = m_bAdjustInnermost;
1283 BeginWaitCursor();
1284 while(m_reURL.Match(*sel)){
1285 CString url = m_reURL.GetMatch(CRegEx::matchMatch);
1286 (*sel) = m_reURL.GetMatch(CRegEx::matchPostMatch);
1287 if(!su.m_URLs.Find(url))
1288 VERIFY(su.m_URLs.AddTail(url));
1289 }
1290 EndWaitCursor();
1291 delete sel;
1292 if(su.DoModal()==IDOK){
1293 POSITION p = su.m_URLs.GetHeadPosition();
1294 while(p){
1295 CString url = su.m_URLs.GetNext(p);
1296 PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString(url));
1297 }
1298 }
1299 return 0;
1300}
1301
1260UINT CPingyHost::PingProc(LPVOID pParam) 1302UINT CPingyHost::PingProc(LPVOID pParam)
1261{ 1303{
1262CPingyHost* pThis = (CPingyHost*)pParam; 1304CPingyHost* pThis = (CPingyHost*)pParam;
1263 ASSERT(pThis->m_Daddy); 1305 ASSERT(pThis->m_Daddy);
1264 return pThis->DoPing(); 1306 return pThis->DoPing();
1265} 1307}
1266 1308
1267UINT CPingyHost::DoPing() 1309UINT CPingyHost::DoPing()
1268{ 1310{
1269CSingleLock slock(&m_mutex); 1311CSingleLock slock(&m_mutex);
1270 if(!slock.Lock(2000)){ 1312 if(!slock.Lock(2000)){
1271 m_Status.LoadString(IDS_PS_FAILEDTOLOCK); 1313 m_Status.LoadString(IDS_PS_FAILEDTOLOCK);
1272 return 1; 1314 return 1;
1273 } 1315 }
1274 m_Pinging = TRUE; 1316 m_Pinging = TRUE;
1275 m_bToPing = FALSE; 1317 m_bToPing = FALSE;
1276 VERIFY(m_Daddy->m_eveStartup.SetEvent()); 1318 VERIFY(m_Daddy->m_eveStartup.SetEvent());
1277 m_Daddy->PostMessage(WM_DNP_UPDATEHOSTDATA,0,(LPARAM)this); 1319 m_Daddy->PostMessage(WM_DNP_UPDATEHOSTDATA,0,(LPARAM)this);
1278in_addr ip; 1320in_addr ip;
1279UINT packets, lost; 1321UINT packets, lost;
1280 packets=lost=0; 1322 packets=lost=0;
1281CICMP* pICMP = NULL; 1323CICMP* pICMP = NULL;
1282UINT dataSize = m_Daddy->m_PingSize; 1324UINT dataSize = m_Daddy->m_PingSize;
1283 intploss = 100; 1325 intploss = 100;
@@ -1562,25 +1604,25 @@ void CDipstickDlg::OnDragpadAdvancedImportlist()
1562{ 1604{
1563 OnAdvancedImportlist(); 1605 OnAdvancedImportlist();
1564} 1606}
1565 1607
1566void CPingyHost::Suicide() 1608void CPingyHost::Suicide()
1567{ 1609{
1568CSingleLock sl(&m_mutex); 1610CSingleLock sl(&m_mutex);
1569 if(sl.Lock(10)){ 1611 if(sl.Lock(10)){
1570 sl.Unlock(); 1612 sl.Unlock();
1571 delete this; 1613 delete this;
1572 }else{ 1614 }else{
1573 if(!AfxBeginThread(CPingyHost::SuicideProc,this)) 1615 if(!AfxBeginThread(CPingyHost::SuicideProc,this))
1574 ASSERT(FALSE); 1616 ASSERT(FALSE);
1575 } 1617 }
1576} 1618}
1577 1619
1578UINT CPingyHost::SuicideProc(LPVOID pParam) 1620UINT CPingyHost::SuicideProc(LPVOID pParam)
1579{ 1621{
1580CPingyHost* pThis = (CPingyHost*)pParam; 1622CPingyHost* pThis = (CPingyHost*)pParam;
1581CSingleLock sl(&pThis->m_mutex); 1623CSingleLock sl(&pThis->m_mutex);
1582 sl.Lock(); 1624 sl.Lock();
1583 VERIFY(sl.Unlock()); 1625 VERIFY(sl.Unlock());
1584 delete pThis; 1626 delete pThis;
1585 return 0; 1627 return 0;
1586} 1628} \ No newline at end of file