多线程中, 如何取消其它线程 被挂起的IO/等待 操作?
帐号已注销 2013-03-10 03:14:15 问题是这样的, 我写了个串口收发程序, 总共开了三个线程.
主线程处理UI,另外两个线程分别用于读和写, 多数情况下都能正常工作.
但我在主线程中关闭通信资源的句柄的时候, CloseHandle(有时)会被挂起, 最终导致主线程失去响应.
于是我想用CancelIo来取消, 但CancelIo只能取消调用线程的IO操作.
CancelIoEx可以用于取消其它线程的操作, 但是不适用于WinXP(我的系统是WinXP).
请问要怎么做, 其它线程的等待操作/IO操作才会被取消?
以前我是使非主线程的ReadFile挂起,这样主线程CloseHandle立即返回(ReadFile因为出错而立即返回,我在CloseHandle前设定了一个标记,以判断出错是不是我自己产生的. 以此来结束线程).
后来我换用WaitCommEvent挂起, 这样一来,CloseHandle就不能立即返回了.
这个问题一直困扰着我, 各位一定帮帮忙呀.