社区
进程/线程/DLL
帖子详情
請教關於線程的一點問題,在線等待。
JXES智能生态系统
博客专家认证
2006-01-18 06:47:02
程序一運行時,就有十多次CreateProcess調用同一個程序的動作,然後用CreatePipe對執行後的結果進行補獲,為什麼程序運行半小時左右後就會死掉,是程序中線程開得太多的問題還是電腦系統裡的問題呢?請教!謝謝!
...全文
191
7
打赏
收藏
請教關於線程的一點問題,在線等待。
程序一運行時,就有十多次CreateProcess調用同一個程序的動作,然後用CreatePipe對執行後的結果進行補獲,為什麼程序運行半小時左右後就會死掉,是程序中線程開得太多的問題還是電腦系統裡的問題呢?請教!謝謝!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
_____non______
2006-01-22
打赏
举报
回复
进程创建成功后要关闭内核计数
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
JXES智能生态系统
2006-01-21
打赏
举报
回复
怎么沒有人幫我啊,自己來頂一下吧
不知為什么,程序運行一段時間阻塞,而且電腦也因此而死掉,不知程序那裡出了問題
說明:我是在OnButton()中調用線程Thread(用AfxBeginThread來調用的),並且SendMessage(hwnd,WM_GARY,50,0);消息最終也是發給OnButton()的,所以我程序隻要一運行起來,就不會停下來的,請教高手了。
JXES智能生态系统
2006-01-21
打赏
举报
回复
還是自己來頂一下吧
有人可以幫我一下嗎?
JXES智能生态系统
2006-01-19
打赏
举报
回复
////////////////////////////
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);
}
上面這樣的代碼我在程序中用了十多次,這只是其中的一個例子,可是不知為什么,程序運行一段時間后就會死掉,同時整個電腦也死在那,是不是進程太多了的問題呢?補充說明,我的程序一運行后都是自動運行的,也就是不停地做這個動作循環,有那位高手可以幫我解答一下嗎,謝謝,在線等待!
JXES智能生态系统
2006-01-19
打赏
举报
回复
to: oyljerry(【勇敢的心】→ ㊣Relax√㊣)
是啊,運行一段時間就會阻塞住,導致整個電腦都死在那
有什么方法可以解決嗎?謝謝
oyljerry
2006-01-19
打赏
举报
回复
是不是阻塞住了
pomelowu
2006-01-18
打赏
举报
回复
CreateProcess是创建进程,不是线程。
应该是程序的问题,不过你的描述太模糊了,不好判断
java是内核线程还是用户线程_三分钟基础:用户级线程和内核级线程有什么区别?...
网上关于多线程的资料很多,小白很快就把线程的基本概念弄懂了,但关于「用户级线程和内核级线程」的概念,她却怎么也搞不清楚,只好向操作系统基础扎实的小明请教。ps:听说小白看的是这篇文章——三分钟基础知识:...
关于线程同步与双队列性能
关于线程同步与双队列性能 2009年7月12日星期日 1问题背景 http://www.cnblogs.com/qwcbeyond/archive/2011/05/10/2042433.html 这是在2008年3月学习多线程编程时遇到的一个问题。当时我写了一个代码片段,其中两...
linux有内核级线程吗,用户级线程和内核级线程,你分得清吗?
网上关于多线程的资料很多,小白很快就把线程的基本概念弄懂了,但关于「用户级线程和内核级线程」的概念,她却怎么也搞不清楚,只好向操作系统基础扎实的小明请教。对于小白的问题,小明总会耐心解答:“线程里面这...
用户级线程和内核级线程,你分清楚了吗?
关于多线程的资料很多,小白把线程的基本概念弄懂了,但关于「用户级线程和内核级线程」的概念,她却怎么也搞不清楚,只好向操作系统基础扎实的小明请教。 对于小白的问题,小明总会耐心解答:“线程里面这两个概念...
用户级线程和内核级线程,你分得清吗?
网上关于多线程的资料很多,小白很快就把线程的基本概念弄懂了,但关于「用户级线程和内核级线程」的概念,她却怎么也搞不清楚,只好向操作系统基础扎实的小明请教。 对于小白的问题,小明总会耐心解答:“线程里面...
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章