由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 一个耗时函数如何响应外部事件?
相关主题
HELP:这个死锁是怎么发生的?Re: 定义数组上限
c++标准函数传递一问VC下的一个运行错误--高手请进!
重复利用threads的问题请教如何在VC6下面安装gsl?
[合集] 忽然发现VC里同一线程的消息函数是无法调用另一个消息函数的...[合集] 请问C 里面有什么针对矩阵运算的库吗?
问个C++编译器如何处理函数内的static 变量VC++ 中的 memory leak problem
请教一个linux下面的多线程semaphore的问题。问一个有关iostream的问题
请教一个线程同步的问题。C++: operator new 为啥要是 static的, 不是有啥影响?
MFC里如何判断一个线程处在Wait的状态?MFC 文档/视 调整窗口大小的问题
相关话题的讨论汇总
话题: signal话题: 耗时话题: sleepex话题: thread话题: 函数
进入Programming版参与讨论
1 (共1页)
d******i
发帖数: 7160
1
VC6的Code.不断用WaitForSingleObject刺探一下?
就没别的法子了? (消息循环除外)
p***o
发帖数: 1252
2
你可以用APC,不用事先知道要等啥object,就是要偶尔用SleepEx
之类的函数alert一下。
http://msdn.microsoft.com/en-us/library/ms684954(VS.85).aspx

【在 d******i 的大作中提到】
: VC6的Code.不断用WaitForSingleObject刺探一下?
: 就没别的法子了? (消息循环除外)

d******i
发帖数: 7160
3
还是要在Code的不同部位各放置一次这样的Check?
那和Event这类的内核对象有何区别?
当然,除了不需要指明等啥之外.
俺的意思是
A.Check很多次.很Ugly.
B.有时程序员也不清楚到底该在哪儿放置这样的Check.
这是WholePoint.
就没有生命一次,全过程适用的办法吗?

【在 p***o 的大作中提到】
: 你可以用APC,不用事先知道要等啥object,就是要偶尔用SleepEx
: 之类的函数alert一下。
: http://msdn.microsoft.com/en-us/library/ms684954(VS.85).aspx

X****r
发帖数: 3557
4
把你的耗时函数放到别的线程去做,主线程继续处理事件。

【在 d******i 的大作中提到】
: 还是要在Code的不同部位各放置一次这样的Check?
: 那和Event这类的内核对象有何区别?
: 当然,除了不需要指明等啥之外.
: 俺的意思是
: A.Check很多次.很Ugly.
: B.有时程序员也不清楚到底该在哪儿放置这样的Check.
: 这是WholePoint.
: 就没有生命一次,全过程适用的办法吗?

d******i
发帖数: 7160
5
概念上该是这样.是清楚.
问题是如何Decent地停掉那个耗时线程.
让它自己Aware吧,问题如OP:在哪儿Aware(CheckForEvent),要Check多少回?
想省事等着被主线程干掉吧,耗时线程声明的新对象新Mem怎么被释放?
还是麻烦啊.

【在 X****r 的大作中提到】
: 把你的耗时函数放到别的线程去做,主线程继续处理事件。
t****t
发帖数: 6806
6
pthread_cancel, but be ware the mandatory cancellation point functions
or make the computation thread respond (sigprocmask) to a specific signal,
then use kill to signal the process itself.
or use tkill to signal the thread directly (linux only).
the signal handler does not need to
stop the thread right away.

【在 d******i 的大作中提到】
: 概念上该是这样.是清楚.
: 问题是如何Decent地停掉那个耗时线程.
: 让它自己Aware吧,问题如OP:在哪儿Aware(CheckForEvent),要Check多少回?
: 想省事等着被主线程干掉吧,耗时线程声明的新对象新Mem怎么被释放?
: 还是麻烦啊.

P********e
发帖数: 2610
7

这个函数一直在等,除非object signaled
什么是一直刺探
如果简单的话,可以用critical section

【在 d******i 的大作中提到】
: VC6的Code.不断用WaitForSingleObject刺探一下?
: 就没别的法子了? (消息循环除外)

p***o
发帖数: 1252
8

其实问题的本质就是如果不check怎么在暴力退出的时候优雅的释放资源。
你可以学习OS,把分配的资源记在一张表里,暴力退出后由其他线程释放。
如果你的程序能在发生c++异常的时候自动释放资源,你也可以试试用
SuspendThread之类的东西插入一个c++异常。这个大概符合你的要求,
就是太麻烦太丑陋。

【在 d******i 的大作中提到】
: 还是要在Code的不同部位各放置一次这样的Check?
: 那和Event这类的内核对象有何区别?
: 当然,除了不需要指明等啥之外.
: 俺的意思是
: A.Check很多次.很Ugly.
: B.有时程序员也不清楚到底该在哪儿放置这样的Check.
: 这是WholePoint.
: 就没有生命一次,全过程适用的办法吗?

O*******d
发帖数: 20343
9
This is the best solution. You call SleepEx on every cycle of your loop.
Any external event will get almost immediate attention.

【在 p***o 的大作中提到】
: 你可以用APC,不用事先知道要等啥object,就是要偶尔用SleepEx
: 之类的函数alert一下。
: http://msdn.microsoft.com/en-us/library/ms684954(VS.85).aspx

I*****y
发帖数: 602
10
Xenstar的解决办法也很好。另外其一个线程做耗时的计算。
论简单易行的话,可能直接sleepEx好一些。

【在 O*******d 的大作中提到】
: This is the best solution. You call SleepEx on every cycle of your loop.
: Any external event will get almost immediate attention.

1 (共1页)
进入Programming版参与讨论
相关主题
MFC 文档/视 调整窗口大小的问题问个C++编译器如何处理函数内的static 变量
Does VC++ 6.0 not support dynamic cast?请教一个linux下面的多线程semaphore的问题。
C语言重复定义问题请教一个线程同步的问题。
[合集] 大家是怎么调试带STL模板类的c++程序的?MFC里如何判断一个线程处在Wait的状态?
HELP:这个死锁是怎么发生的?Re: 定义数组上限
c++标准函数传递一问VC下的一个运行错误--高手请进!
重复利用threads的问题请教如何在VC6下面安装gsl?
[合集] 忽然发现VC里同一线程的消息函数是无法调用另一个消息函数的...[合集] 请问C 里面有什么针对矩阵运算的库吗?
相关话题的讨论汇总
话题: signal话题: 耗时话题: sleepex话题: thread话题: 函数