c等待所有线程结束
『壹』 C#如何让一个线程一直等待直到到一个事件的发生,然后处理完后继续等待
有专门控制信号的两个类AutoResetEvent和ManualResetEvent
使用简单说明:
实例化对象
EventWaitHandle _waitHandle = new AutoResetEvent (false);
在线程函数中
while(true)
{
_waitHandle.WaitOne();
//事件发生后要做专的任务
}
事件发生时调属用 _waitHandle.Set()
补充下: 循环中_waitHandle一直在等待,且不会占用cpu 当调用Set时 就执行WaitOne一下的代码了,然后又循环 又WaitOne 等待再次Set()
C# 线程很好的文章,看看学习下吧
http://www.albahari.com/threading/
『贰』 C# 中如何让 主线程 等待 子线程终止
利用异步回调技术,该你个简单的例子。
/// <summary>
/// 开始接收数据
/// </summary>
/// <returns></returns>
public bool StartRevice()
{
isRevice = false;
ReviceDataHandler reviceData = new ReviceDataHandler(IsReviceAll);
IAsyncResult asyncResult = reviceData.BeginInvoke(null, null);
while (!asyncResult.IsCompleted)
{
Thread.Sleep(200);
DataTran.ReviceQuery();
}
bool revFinish = reviceData.EndInvoke(asyncResult);
isRevice = false;
return revFinish;
}
private static bool IsReviceAll()
{
int outTime = 5000;
int index = 0;
while (index < outTime)
{
if (isRevice)
return true;
index += 200;
Thread.Sleep(200);
}
return false;
}
调用BeginInvoke开始网络接收数据,利用asyncResult.IsCompleted判断是否接收完成,没有接收完成就就继续接收。完成就返回你的数据结构。
『叁』 C语言如何终止线程
终止线程有三种方法:
1.线程可以在自身内部调用AfxEndThread()来终止自身的运行
2.可以在线程的版外部调用权BOOL TerminateThread( HANDLE hThread, DWORD dwExitCode )来强行终止一个线程的运行,
然后调用CloseHandle()函数释放线程所占用的堆栈
3.第三种方法是改变全局变量,使线程的执行函数返回,则该线程终止。
unsigned long __cdecl _beginthread (void (__cdecl *) (void *),
unsigned, void *);
void __cdecl _endthread(void);
unsigned long __cdecl _beginthreadex(void *, unsigned,
unsigned (__stdcall *) (void *), void *, unsigned, unsigned *);
void __cdecl _endthreadex(unsigned);
找到的一些资料,希望有点帮助,要不你代码贴点出来
『肆』 VC 如何等待所有子线程退出,我没有保存线程handle,就是begin了一下。
那你就保存一下,然后专用属
CWinThread* pThread = AfxBeginThread(....)
WaitForSingleObject(pThread->m_hThread, INFINITE);
『伍』 求高手指点,如何用C++中的 WaitForMultipleObjecct 功能,等待如下代码中两个线程执行结束
WaitForMultipleObjecct是WinAPI的,你得用__beginthread或者其他api创建的才能等待,你用的是std标准库里的,直接用join来等待结束就可以了。
『陆』 linux下C/C++如何实现非阻塞等待子线程结束
主线程可以使用一来个数组存自储子线程的ID,不调用 pthread_join来等候子线程退出,要是子线程退出后还有工作要清理,可以使用 pthread_cancel_push函数来注册退出控制流时调用的函数