請教關於線程的一點問題,在線等待。

JXES智能生态系统
博客专家认证
2006-01-18 06:47:02
程序一運行時,就有十多次CreateProcess調用同一個程序的動作,然後用CreatePipe對執行後的結果進行補獲,為什麼程序運行半小時左右後就會死掉,是程序中線程開得太多的問題還是電腦系統裡的問題呢?請教!謝謝!
...全文
191 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
_____non______ 2006-01-22
  • 打赏
  • 举报
回复
进程创建成功后要关闭内核计数

CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
  • 打赏
  • 举报
回复
怎么沒有人幫我啊,自己來頂一下吧

不知為什么,程序運行一段時間阻塞,而且電腦也因此而死掉,不知程序那裡出了問題
說明:我是在OnButton()中調用線程Thread(用AfxBeginThread來調用的),並且SendMessage(hwnd,WM_GARY,50,0);消息最終也是發給OnButton()的,所以我程序隻要一運行起來,就不會停下來的,請教高手了。
  • 打赏
  • 举报
回复
還是自己來頂一下吧
有人可以幫我一下嗎?
  • 打赏
  • 举报
回复
////////////////////////////
void Diagnotor1()
//DWORD WINAPI Diagnotor(LPVOID pParam)
{
char Temp[1024];
sprintf(Temp,"%s %s %s %s","diagnotor.exe",FileName,COMStr,BaudRateStr);
//AfxMessageBox(Temp);
//HWND hwnd = (HWND)pParam;
//SendMessage(hwnd,WM_GARY,3,0);
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
AfxMessageBox("Error On CreatePipe()");
//return FALSE;
}

STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,Temp,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
AfxMessageBox("Error on CreateProcess()");
//return FALSE;
}
CloseHandle(hWrite);

char buffer[4096] = {0};
//char buffer_diagnotor[4096];
DWORD bytesRead;
while (true)
{
if(ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
strcpy(buffer_diagnotor1, buffer);
}
}
//////////////////////////////////////////////
UINT Thread(LPVOID pParam)
{
HWND hwnd = (HWND)pParam;
Diagnotor1();
Sleep(500);
strcpy(buffer_diagnotor11,buffer_diagnotor1);

if (! strstr(buffer_diagnotor11,"found on the target"))
{
SendMessage(hwnd,WM_GARY,50,0);
return FALSE;
}
else
{
char Temp[1024];
sprintf(Temp,"%s %s %s %s","prgflash.exe",FileName,COMStr,BaudRateStr);
//AfxMessageBox(Temp);
HWND hwnd = (HWND)pParam;
SendMessage(hwnd,WM_GARY,3,0);
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;

sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
AfxMessageBox("Error On CreatePipe()");
return FALSE;
}

STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,Temp,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
AfxMessageBox("Error on CreateProcess()");
return FALSE;
}
CloseHandle(hWrite);

char buffer[4096] = {0};
char buffer_gary[4096];
DWORD bytesRead;
while (true)
{
if(ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
strcpy(buffer_gary, buffer);
}
//AfxMessageBox(buffer_gary);
if(strstr(buffer_gary,"CRC comparison passed"))
i=1;
else
i=2;
if(i==1)
SendMessage(hwnd,WM_GARY,1,0);
if (i == 2)
SendMessage(hwnd,WM_GARY,2,0);
}
///////
Diagnotor1();
Sleep(500);
while (strcmp(buffer_diagnotor11,buffer_diagnotor1) == 0)
{
Diagnotor1();
}
if (strcmp(buffer_diagnotor11,buffer_diagnotor1) != 0)
Sleep(5000);
SendMessage(hwnd,WM_GARY,51,0);

SendMessage(hwnd,WM_GARY,50,0);

return TRUE;
}

////////////////////////////////////////
void CFWDlg::OnButton3()
{
// TODO: Add your control notification handler code here
m_ComboCOM1.GetLBText(m_ComboCOM1.GetCurSel(),COMStr);
m_ComboBaudRate1.GetLBText(m_ComboBaudRate1.GetCurSel(),BaudRateStr);
FileName = m_ShowFile1;
AfxBeginThread(Thread,LPVOID(this->GetSafeHwnd()),0,0,NULL);
}
上面這樣的代碼我在程序中用了十多次,這只是其中的一個例子,可是不知為什么,程序運行一段時間后就會死掉,同時整個電腦也死在那,是不是進程太多了的問題呢?補充說明,我的程序一運行后都是自動運行的,也就是不停地做這個動作循環,有那位高手可以幫我解答一下嗎,謝謝,在線等待!
  • 打赏
  • 举报
回复
to: oyljerry(【勇敢的心】→ ㊣Relax√㊣)
是啊,運行一段時間就會阻塞住,導致整個電腦都死在那
有什么方法可以解決嗎?謝謝
oyljerry 2006-01-19
  • 打赏
  • 举报
回复
是不是阻塞住了
pomelowu 2006-01-18
  • 打赏
  • 举报
回复
CreateProcess是创建进程,不是线程。
应该是程序的问题,不过你的描述太模糊了,不好判断

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧