文号
t18203
阅读
9233
回复
29
收藏
9
求助:如何让一个函数一直执行下去
2009/08/02
IP:浙江
某函数的功能是检测某点颜色
如果满足某些条件,则做某些事情。
我希望它一直执行下去,直到进程被干掉。
最后不用return就可以了吗?

还是要在函数末尾再执行一遍??
。。。。。。。。。。。
(热烈庆祝不用20字了)
17年5个月前IP:未同步
135172
1楼
做个无限循环,中间用个延时的函数,隔一段时间进行一次循环就可以。
引用
评论
17年5个月前IP:未同步
135174
2楼
就用LS的方法。如果进程功能复杂得话,那么需要考虑把这个函数放在某线程里执行。
引用
评论
17年5个月前IP:未同步
135175
3楼
timer1可以满足您的要求。简单方便快捷高效。
引用
评论
17年5个月前IP:未同步
135189
4楼
for(;;){
;
}


while(1){
;
}



loop:
;
goto loop;
引用
评论
phpskycn作者
17年5个月前IP:未同步
135200
5楼
早就试过了
我家的老爷机上会让进程直接死掉
引用
评论
17年5个月前IP:未同步
135202
6楼
引用第5楼phpskycn于2009-08-02 16:50发表的  :
早就试过了
我家的老爷机上会让进程直接死掉

原来如此,原来windows会自动结束/挂起运算中的进程,受教受教
引用
评论
17年5个月前IP:未同步
135204
7楼
引用楼主phpskycn于2009-08-02 15:08发表的 求助:如何让一个最后不用return就可以了吗?

还是要在函数末尾再执行一遍??
.......


这个问题相当强悍,如果运算中的进程会被windows结束/挂起,我确实想不出什么好方法可以循环

对了!可以截获线程退出事件,在这个事件执行之前启动另一个exe!
引用
评论
17年5个月前IP:未同步
135205
8楼
引用第5楼phpskycn于2009-08-02 16:50发表的  :
早就试过了
我家的老爷机上会让进程直接死掉

1.复杂的过程中保险起见应该加try catch
2.过程执行当中会停止进程的其它操作,包括对Message的响应,建议新开线程
引用
评论
17年5个月前IP:未同步
135206
9楼
引用第8楼我说要有光于2009-08-02 16:57发表的  :

1.复杂的过程中保险起见应该加try catch
2.过程执行当中会停止进程的其它操作,包括对Message的响应,建议新开线程

一点都不复杂,不过是getpixel然后发键盘而已  = =
其实LZ的情况是这样的,如果创建一个线程让它循环,就会出现假死

解决方法非常 无敌的简单,就是sleep()一会

LZ所谓的“挂掉”不过是这个进程太“专心”罢了,让它sleep几毫秒就好
引用
评论
17年5个月前IP:未同步
135207
10楼
引用第6楼破93于2009-08-02 16:52发表的  :

原来如此,原来windows会自动结束/挂起运算中的进程,受教受教

加个按钮,写句while(1){Sleep(1000);}
你点你也死。。 = =
引用
评论
17年5个月前IP:未同步
135210
11楼
引用第10楼我说要有光于2009-08-02 16:59发表的  :

加个按钮,写句while(1){Sleep(1000);}
你点你也死。。 = =

情况不一样,死的是UI线程 = =
您可以做个测试,创建一个线程然后一直判断循环,不sleep,会发现CPU100%
加一句sleep(50)就嘛事没有,0%

我写superclick的时候就出现了这种情况,sleep(50)解决
引用
评论
17年5个月前IP:未同步
135215
12楼
小光看着办 = = 简单测试

t1.png

t2.png
引用
评论
17年5个月前IP:未同步
135217
13楼
楼上是因为电脑太好,我这里sleep和不sleep时候CPU占用率是一样的。
引用
评论
17年5个月前IP:未同步
135218
14楼
线程里就算不sleep通常进程也是不会死的```  最多对Message的响应会慢些
引用
评论
17年5个月前IP:未同步
135220
15楼
引用第14楼我说要有光于2009-08-02 17:14发表的  :
线程里就算不sleep通常进程也是不会死的```  最多对Message的响应会慢些

于是LZ说“挂掉”就必然是不可能的了
引用
评论
17年5个月前IP:未同步
135222
16楼
引用第13楼novakon于2009-08-02 17:14发表的  :
楼上是因为电脑太好,我这里sleep和不sleep时候CPU占用率是一样的。

马上开机,上奔三
引用
评论
17年5个月前IP:未同步
135230
17楼
算了……没装framework

两位应该去看一下《深入解析windows操作系统》第六章(进程、线程和作业),有详细提到这方面的内容
引用
评论
phpskycn作者
17年5个月前IP:未同步
135239
18楼
唉,93语文水平就是没长进
挂掉==挂起,程序无响应
引用
评论
17年5个月前IP:未同步
135242
19楼
看清楚,我写的就是挂起(hang)
引用
评论
17年5个月前IP:未同步
135243
20楼
多线程+SLEEP(非VB。。。)
或者
timer
引用
评论
phpskycn作者
17年5个月前IP:未同步
135245
21楼
典型错误:断章取义
结束二字就这么不见了
引用
评论
17年5个月前IP:未同步
135254
22楼
没必要把某人用汉语语法书写cpp的光荣事迹拖出来吧……

还有我觉得用timer比啥都强,什么挂起啊这些问题都没有了
引用
评论
17年5个月前IP:未同步
135255
23楼
timer  实际上就是脑残版新线程+sleep 。。但是又不能算多线程 有点不伦不类的感觉 = =

但是用timer进行复杂运算的话UI线程会卡住 。。所以timer比较适合 比较 呃 XX吧 = =
引用
评论
17年5个月前IP:未同步
135256
24楼
引用第23楼novakon于2009-08-02 18:54发表的  :
没必要把某人用汉语语法书写cpp的光荣事迹拖出来吧……

还有我觉得用timer比啥都强,什么挂起啊这些问题都没有了

还是线程有爱,Timer如果不小心加到UI线程上了那还是会卡的。
一个System.Threading命名空间搞定一切。
引用
评论
17年5个月前IP:未同步
135260
25楼
楼主的程序貌似不需要“流畅”,只要能监测屏幕像素就行了。除非会影响到其他程序的运行,否则其性能问题基本不用考虑……
引用
评论
17年5个月前IP:未同步
135262
26楼
确实是这样的,.NET里可以5行以内搞定的程序 。。
引用
评论
17年5个月前IP:未同步
135263
27楼
第一行:copy屏幕
第二行:获取像素
第三行:判断并执行

还有两行循环语句,实际上包含循环,3行能搞定 。。
引用
评论
17年5个月前IP:未同步
135277
28楼
引用第24楼破93于2009-08-02 18:56发表的  :
timer  实际上就是脑残版新线程+sleep 。。但是又不能算多线程 有点不伦不类的感觉 = =

但是用timer进行复杂运算的话UI线程会卡住 。。所以timer比较适合 比较 呃 XX吧 = =

timer可以用来创建线程,用完直接销毁就OK了```
引用
评论
17年5个月前IP:未同步
135325
29楼
用MFC的话要用AfxBeginThread新开线程来做,否则的话无法回到消息循环,应用程序会失去响应。
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的