我有检查智能卡是否插入或移除的代码:
void checkCard(void *p)
{
//...
while(true)
{
if (ReaderState1.dwEventState & SCARD_STATE_EMPTY)
{
// Smart card removed, call disconnect
disconnectCard(cardHandle);
}
else
{
// Smart card inserted do smth else
}
}
}
在main
我调用上面的线程:
int main()
{
...
if(establichContext(_hSC) == true)
{
// Start thread
_beginthread(checkCard, 0, NULL);
// Sleep
Sleep(1000000); // or some other logic which halts program for some time
// Disconnect from card and release context
disconnectCard(cardHandle);
releaseContext(_hSC);
}
}
我的问题是,如果智能卡已被删除 - 通过第一个代码片段(checkCard
函数),调用disconnectCard
- 第二次如 in main
,失败。你会如何处理这种情况?
disconnectCard
- 仅在内部使用 SCardDisconnect 方法)http://msdn.microsoft.com/en-us/library/windows/desktop/aa379475 (v=vs.85).aspx )