我在c#中新开一个线程调用由DLLImport进来的一个函数,函数运行的时间比较长,那个dll还是用C写的,c++.net编译的,在执行的过程中会再堆上建立一些对象,如果是正常的退出,在函数的最后会有清理的工作,但是要是在运行过程中强制退出就不行了,有什么好办法来做吗?首先要能实现函数能接收到消息,然后要在固定的地方响应消息,因为在函数的执行过程中,会调用子函数,子函数也会使用堆,最后释放,程序在运行子函数的时候,也是不能被打断的。
我的想法是在函数固定的几个地方可以检测一下消息(在子函数之外),如果发过来了中断的消息,那么就运行清理函数,并退出。这样的另外一个问题是,如果消息在检查函数运行之前就发过来了,就要保存好,等运行检查的时候就来响应。
这个在linux上是很容易做到的,linux支持signal,并且在block signal的过程中会保存发过来的消息(虽然发过来的消息的次数不准确),那么对自己发消息,那个子线程捕获消息,然后清理退出。
在windows上怎么做呢?我查了很多资料,我看全局变量是不可能的了吧,其他的呢?sendmessage什么的可以这样用的吗?