外部中止线程

外部中止线程

发表: 不详   阅读: 793次  关键字:   字体:[ ]

 

问:我有一个对话框,里面显示了一系列在一目录中可用的文件,我想当目录的
内容有所 变化时,对话框也能发生相应的变化,这需要从别的线程实现这个要
求,但怎样才能使该 线程能在对话框退出时同时关闭?

答:你可以做下面的一件事情就可以实现.
-在对话框中调用TerminateThread(handle, exitcode). -使用信号量,当你
想关闭线程时只需检查该标志罢了. -在线程中使用消息循环,然后从对话框
调用PostThreadMessage     2)谢谢大家的回复,在大家的帮助下我的问题
已经解决了,现写出来给大家作参考. 问题是有一个对话框,里面显示了一
系列在一目录中可用的文件,我想当目录的内容有所 变化时,对话框也能发
生相应的变化.其实用一个新线程以及使用WaitForSingleObject() 循环就
可以了.但似乎不容易在退出对话框时中止线程,解决方法包括建立一个私
有事件 用WaitForMultipleObjects()等待.具体如下


BOOL CLocalNotes::OnInitDialog()
{
    Cdialog::OnInitDialog();

Cstring eventname;          // Generate a unique event name
    eventname.Format("Viewer %x", &eventname);

    m_FinishedHandle = CreateEvent(NULL, false, false, eventname);
    m_WatcherThread = AfxBeginThread(FileWatcher, this,
THREAD_PRIORITY_NORMAL,
	0, CREATE_SUSPENDED, NULL);
    m_NotifyHandle=::FindFirstChangeNotification(m_PatDir, false,
	FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_DIR_NAME);
    m_WatcherThread->ResumeThread();

    RefreshList();              // Generate the list of files
    return TRUE;
}
....
Static UINT FileWatcher(LPVOID TheNote)
{
    CLocalNotes *OurNote = (CLocalNotes*)TheNote;

    HANDLE handle[2];

    handle[0]=OurNote->NotifyHandle();
    handle[1]=OurNote->FinishedHandle();

    for (;;) {
	if (::WaitForMultipleObjects(2, handle, false, INFINITE) ==
		WAIT_OBJECT_0+1)
	    break;                      //
Finished notification
	OurNote->RefreshList();
	FindNextChangeNotification(OurNote->NotifyHandle());
    }

    return 0;
}
....
CLocalNotes::~CLocalNotes()
{
    ::SetEvent(m_FinishedHandle);
    WaitForSingleObject(m_WatcherThread->m_hThread, INFINITE);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值