使用线程后程序响应变慢,如何优化?(50分)

  • 主题发起人 主题发起人 yjingz
  • 开始时间 开始时间
Y

yjingz

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的程序实现的功能是:单击button1后启动windows中的notepad.exe,再使用key_event模拟键盘在记事本中输入5行:(想一次性完成上面的操作)
aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
------------------------------------------------
var
Form1: TForm1;
hThread1,hThread2:Thandle;//定义一个句柄
ThreadID1,ThreadID2:DWord;
...
procedure threadwrite;
var npad:HWND;
i,j:integer;
time1:TDateTime;
begin
{ 连续打开记事本再输入不成功,这和记事本还没完全启动有关系,所以改用线程技术
shellExecute(handle,'open','notepad.exe',nil,nil,sw_shownormal);}
time1:=now;
repeat {} until time1+strToTime('00:00:5')<=now;//延迟5秒等待记事本打开
Npad := FindWindow(nil, '无标题 - 记事本');
if Npad <> 0 then
begin
BringWindowToTop(Npad);
for j:=1 to 5do
begin
for i := ord('A') to ord('Z')do
begin

keybd_event(i, 0, 0, 0);

keybd_event(i, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_SHIFT, 0, 0, 0);

keybd_event(I, 0, 0, 0);

keybd_event(I, 0, KEYEVENTF_KEYUP, 0);

keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);

end;
keybd_event(VK_RETURN, 0, 0, 0);
//换行
keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
end;
end;

end;

procedure threadopen;
begin
shellExecute(0,'open','notepad.exe',nil,nil,sw_shownormal);
end;

procedure TForm1.Button1Click(sender:Tobject);
begin
hThread1:=CreateThread(nil,0,@threadopen,nil,0,ThreadID1);
hThread2:=CreateThread(nil,0,@threadwrite,nil,0,ThreadID2);
end;

不过这样的代码程序响应有点慢,哪位能优化一下吗?
 
只要一个线程就可以了,
shellExecute(0,'open','notepad.exe',nil,nil,sw_shownormal);
if FindWIndow('Notepad', nil) <> 0 then
hThread2:=CreateThread(nil,0,@threadwrite,nil,0,ThreadID2);
==》repeat {} until time1+strToTime('00:00:5')<=now;//延迟5秒
windows.Sleep(5000);
 
接受答案了.
 
后退
顶部