关于线程同步的问题,大侠们帮忙啊 现有两个函数a和b,a和b如果是没有线程必须是a执行完后再执行b。现在是a里面有一个while循环有100次,我现在是要在a里的循环执行了20此后挂起再执行b,怎么办,能给出具体的代码么,谢谢!!!!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 class CAsyncEventWaiter {public: CAsyncEventWaiter(); virtual ~CAsyncEventWaiter(); void SetAsyncEvent( HRESULT hrAsync ); void WaitForEvent( DWORD msMaxWaitTime = INFINITE, HANDLE hEvent=NULL ); //void SetAsyncEvent(); void ResetAsyncEvent(); HRESULT GetAsyncEventResult()const{return m_hrAsync;}private://sync CEvent m_AsyncEvent; // event handle HRESULT m_hrAsync; // HRESULT during async operations};CAsyncEventWaiter::CAsyncEventWaiter(){ m_hrAsync = S_OK;}CAsyncEventWaiter::~CAsyncEventWaiter(){}void CAsyncEventWaiter::ResetAsyncEvent(){ m_AsyncEvent.ResetEvent();}void CAsyncEventWaiter::SetAsyncEvent( HRESULT hrAsync ){ m_hrAsync = hrAsync; m_AsyncEvent.SetEvent( );}void CAsyncEventWaiter::WaitForEvent(DWORD msMaxWaitTime, HANDLE hEvent){ if(hEvent==NULL) hEvent=m_AsyncEvent; DWORD i; MSG msg; TRACE("WaitForEvent %d Begin\r\n",msMaxWaitTime); for( i = 0; i < msMaxWaitTime; i += 10 ){ if( PeekMessage( &msg, ( HWND ) NULL, 0, 0, PM_REMOVE ) ){ TranslateMessage( &msg ); DispatchMessage( &msg ); } if( WAIT_TIMEOUT != WaitForSingleObject( hEvent, 10 ) ){ break; } } if(i ==msMaxWaitTime){ TRACE("WaitForEvent Abandoned\r\n"); } else TRACE("WaitForEvent End\r\n"); return;}在一个线程中调用WaitForEvent,可以等待到在另外一个线程中调用SetAsyncEvent,或者等待超时。注意WaitForEvent之前先调用ResetAsyncEvent。 谢谢 aiirii,也祝大家新年快乐,我来试试看 Delphi TMenuItem的Hint不显示怎么办?(100分) 这个sql语句怎么写 只剩40分,没法只能以后补了,急急急 群發郵件 MessageBox问题? 关于combobox数据源问题 请教:一个错误消息的原因及解决方法; 运行期,改变控件的大小,就像设计时,出现8 个小黑点,这个问题真的好难 为什么这段关闭计算机的代码无法实现关闭电源? 请问怎样使“Form”在屏幕上显示在需要的位置上? 唉, 又一个感人的爱情故事...... 2003年最后一贴 2004 我来了
{
public:
CAsyncEventWaiter();
virtual ~CAsyncEventWaiter();
void SetAsyncEvent( HRESULT hrAsync );
void WaitForEvent( DWORD msMaxWaitTime = INFINITE, HANDLE hEvent=NULL );
//void SetAsyncEvent();
void ResetAsyncEvent();
HRESULT GetAsyncEventResult()const{return m_hrAsync;}
private:
//sync
CEvent m_AsyncEvent; // event handle
HRESULT m_hrAsync; // HRESULT during async operations};
CAsyncEventWaiter::CAsyncEventWaiter()
{
m_hrAsync = S_OK;
}CAsyncEventWaiter::~CAsyncEventWaiter()
{}
void CAsyncEventWaiter::ResetAsyncEvent()
{
m_AsyncEvent.ResetEvent();
}
void CAsyncEventWaiter::SetAsyncEvent( HRESULT hrAsync )
{
m_hrAsync = hrAsync;
m_AsyncEvent.SetEvent( );
}
void CAsyncEventWaiter::WaitForEvent(DWORD msMaxWaitTime, HANDLE hEvent)
{
if(hEvent==NULL)
hEvent=m_AsyncEvent;
DWORD i;
MSG msg;
TRACE("WaitForEvent %d Begin\r\n",msMaxWaitTime);
for( i = 0; i < msMaxWaitTime; i += 10 ){
if( PeekMessage( &msg, ( HWND ) NULL, 0, 0, PM_REMOVE ) ){
TranslateMessage( &msg );
DispatchMessage( &msg );
}
if( WAIT_TIMEOUT != WaitForSingleObject( hEvent, 10 ) ){
break;
}
}
if(i ==msMaxWaitTime){
TRACE("WaitForEvent Abandoned\r\n");
}
else
TRACE("WaitForEvent End\r\n");
return;
}在一个线程中调用WaitForEvent,可以等待到在另外一个线程中调用SetAsyncEvent,或者等待超时。注意WaitForEvent之前先调用ResetAsyncEvent。