高手请进(使用CreateProcess() and ShellExecuteEx())的问题:

网事随逢 2002-07-13 03:57:15
加精
刚刚完成一个应用程序,含有很多的菜单项,本来我是想使用多线程来实现对程序的组织,另外由于涉及到数据库访问等比较占用资源的问题,问了避免数据访问瓶颈问题;还有就是在主线程中UDP接收是不能中断的(有优先级问题).但是项目经理希望把每一个菜单项做成.exe,使用CreateProcess() and ShellExecuteEx()进行调用,于是有疑问:
1.在主进程中如何控制每次只能启动一个.exe,如何在主进程中进行控制?
2.如果使用WaitExitSingleObject(aa,aa),同样会出现占用太多系统资源的问题,那如何确定.exe已经停止.
注(试验结果):如果使用线程,(设定该线程的优先级比标准低2个点)查询30万条纪录,用时
72秒,如果单独做一个.exe同样的操作用时206秒.
高手请执教:1. 2.
...全文
97 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
网事随逢 2002-07-14
  • 打赏
  • 举报
回复
明白了,谢谢,继续学习.
jishiping 2002-07-14
  • 打赏
  • 举报
回复
很简单啊。
void __fastcall TForm1::ButtonClick(TObject *Sender)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
static HANDLE hProcess=0; //上次运行时的进程句柄

if (hProcess && WaitForSingleObject(
hProcess,0)==WAIT_TIMEOUT)
return; //Program is slready Runs.

memset(&si, 0, sizeof(si));
si.cb = sizeof(STARTUPINFO);
if (CreateProcess(ExeName,NULL,NULL,
NULL,FALSE,0,NULL,NULL,&si,&pi))
hProcess = pi.hProcess;
}
网事随逢 2002-07-14
  • 打赏
  • 举报
回复
我现在是在主进程中
全局变量;bool ExeIsRun=false;

void __fastcall ButtonClick(...)
{
if(ExeIsRun==true)
{
ShowMessage("只能启动一个.exe");
return;
}
if(CreateProcess(...)!=0)
{
ExeIsRun =true;
}
//如何????
//如果;
if(WaitForSingleObject(....hProcess,INFINIT)==WAIT_OBJECT_0)
{
ExeIsRun = false;
}
//则在等待停止信号的时候会狂耗主进程的资源....
}
还是在等待如何监视该进程状态?
sncel(地狱情人) ...
你知道我在等你吗?
网事随逢 2002-07-13
  • 打赏
  • 举报
回复
my e_mail:
liu76xt@yahoo.com.cn
thank you! sncel.
sncel 2002-07-13
  • 打赏
  • 举报
回复
监视该进程状态就行了。我有代码留下E_mail.
jishiping 2002-07-13
  • 打赏
  • 举报
回复
WaitForSingleObject(hProcess,0)==WAIT_OBJECT_0 //就表示进程结束了。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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