求教:该怎么办???(200分)

  • 主题发起人 主题发起人 435214
  • 开始时间 开始时间
4

435214

Unregistered / Unconfirmed
GUEST, unregistred user!
我是菜鸟,我在工作中经常碰到这类问题.计算机检测到某个开关量后进行某个动作,然后又检测下一个开关量,进行某个动作.我是用Timer定时检测的,但是,开关量的脉冲宽度很窄,大约是<5ms,经常检测不到信号.我该怎么办??如用多线程,请给我一个示例源程序,谢谢好心人了!!不用线程是否可行???我邮箱是:feimd73@163.com.
我的源码如下:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
case workstate of
10:begin
if inportb($200)=$01 then workstate:=20;
end;
20:begin
if inportb($200)=$02 then workstate:=30;
end;
30:begin
if inportb($200)=$04 then workstate:=10;
end;
end;
end;
 
网上有很多线程例子
 
针对我的问题提出解决办法阿,别这样打发我这样的菜鸟阿!!求大哥给一个吧!!!
 
你找一下多线程的例子啊,
在execute里写个while循环,里面代码就是你timer里的代码
 
你的timer的始终设为1不行么?
 
来如风大哥,给我写一个阿,对你们好简单,对我难如上青天呀.唉,菜鸟就是命苦阿,没人愿意理!!
 
TMyThread = class(TThread)
private
{ Private declarations }
public
{ Public declarations }
protected
procedure Execute;override; //这里就是线程的执行部分
end;
定义完之后直接Ctrl+Shift+C,系统自动帮你生成几句代码的,不按也行,自己写下面的代码
{ TMyThread }

procedure TMyThread.Execute;
begin
inherited;
while not Terminated do
begin
;//这里就是你循环执行的内容
;
end;
end;

使用:
var
mt: TMyThread;

mt := TMyThread.Create(true); //true表示一创建就挂器,false表示创建了就执行
my.Resume; //唤醒
mt.Suspend; //挂起,可以理解成暂停
mt.Terminate;//终止
 
哈哈,好详细阿,谢谢好心人哦.谢谢谢谢!!!
 
对了,来如风大哥,如果我要在线程while里把它自己Suspend,可以吗???或者怎么把它KILL了!!
 

Similar threads

S
回复
0
查看
855
SUNSTONE的Delphi笔记
S
S
回复
0
查看
783
SUNSTONE的Delphi笔记
S
后退
顶部