//begin a new thread
m_pMonitorThread = ::AfxBeginThread((AFX_THREADPROC)MonitorThread, this, THREAD_PRIORITY_ABOVE_NORMAL);
//wait for thead exit
m_bExitMonitorThread = true;
if(m_pMonitorThread) WaitForSingleObject(m_pMonitorThread->m_hThread, INFINITE);
//thread pro
HRESULT CCmppAgentDlg::MonitorThread(LPVOID param)
{
... bool& bExit = pDlg->m_bExitMonitorThread;
time_t last = time(NULL);
while(!bExit)
{
Sleep(10);
if((time(NULL) - last) >= HeartBeatInterval)
{
//send hearbeat packet if service is not run or thread is active in run
if(ThreadActiveFlag == (unsigned char)0x07 || !pDlg->m_pThread)
{
MonitorTask.SendHeartbeatFrame(0);
ThreadActiveFlag = 0x0;
}
last = time(NULL);
}...
}
m_pMonitorThread = ::AfxBeginThread((AFX_THREADPROC)MonitorThread, this, THREAD_PRIORITY_ABOVE_NORMAL);
//wait for thead exit
m_bExitMonitorThread = true;
if(m_pMonitorThread) WaitForSingleObject(m_pMonitorThread->m_hThread, INFINITE);
//thread pro
HRESULT CCmppAgentDlg::MonitorThread(LPVOID param)
{
... bool& bExit = pDlg->m_bExitMonitorThread;
time_t last = time(NULL);
while(!bExit)
{
Sleep(10);
if((time(NULL) - last) >= HeartBeatInterval)
{
//send hearbeat packet if service is not run or thread is active in run
if(ThreadActiveFlag == (unsigned char)0x07 || !pDlg->m_pThread)
{
MonitorTask.SendHeartbeatFrame(0);
ThreadActiveFlag = 0x0;
}
last = time(NULL);
}...
}
CreateSemaphore //创建信号量
WaitForSingleObject //相当于P操作
ReleaseSemaphore //相当于V操作 用一线程控制界面上的控件中的值同步更新,假设信号量句柄为update:
如:
while(1)
{ 更新操作;
P(update);
}
然后,见下面UINT CMYVIEW::threadfun(LPVOID k)
{
SLEEP(5000);
a = a + 1 ;
V(update); ???;//让界面上的控件中的值同步更新,如何实现;
b = b + 1 ;
V(update); ???;//让界面上的控件中的值同步更新,如何实现;
}
CMYVIEW::ONBUTTONSTOPTHREAD()
{
调用线程的exit(); ???;//让生成的线程立即终止运行,如何实现;
}有一个我的作业题,也是线程同步问题,如果你需要的话,发email到
[email protected],我用附件发给你.
但是我怎么发送不到相应的函数当中呢
从发送的返回值来看是发送成功了
而且GETLASTERROR也显示成功
但是就是进不去相应的函数
怎么回事?
谁有这样的例子,麻烦给发一个吧
[email protected]