多线程在挂起操作后,线程同步函数是怎么停止的

多线程在挂起操作后,线程同步函数是如何停止的
void __fastcall T_DRAW_THREAD::Execute(void) 

  while (!Terminated) 
  { 
Synchronize(OnDrawThread); 
  } 


void __fastcall T_DRAW_THREAD::OnDrawThread(void) 

  EnterCriticalSection(&cs); 
  frmMain->RealWorkProcess(); 
  LeaveCriticalSection(&cs); 


在挂起线程操作后,RealWorkProcess函数会在哪一步停止下来,还是停止到随机的一步。 
比如: 
RealWorkProcess() 

  step 1; 
  step 2; 
  step 3; 
..... 


在程序中某处挂起线程后,RealWorkPorcess会怎么运行,是随机的停止到stepX上吗? 
谢谢! 


------解决方案--------------------
在Execute过程中调用Synchronize过程来避免对VCL的并发访问。程序运行期间的具体过程实际上是由Synchronize过程来通知主线程,然后主线程在适当的时机来执行Synchronize过程的参数列表中的那个不带参数的过程。在多个线程的情况下,主线程将Synchronize过程发过来的通知放到消息队列中,然后逐个地响应这些消息。通过这种机制Synchronize实现了线程之间地同步。Synchronize里不需要同步互斥否则挂起可能会导致不明确的行为,停止地方是不可预料的
------解决方案--------------------
1Synchronize里不需要同步互斥。 
2挂起会导致不明确的行为,停止地方是不可预料的。 

------解决方案--------------------
1楼说的是对的,lz对Synchronize不理解,lz的写法实际上不是真正的多线程,真正在线程内运行的代码只有while (!Terminated) ,OnDrawThread整个过程都是通过消息控制添加到主线程运行的,主线程里使用消息循环机制运行,无论你怎么挂起线程,OnDrawThread过程都是要不不被运行,要不全部运行完成,不会受到任何干扰,EnterCriticalSection(&cs)的临界区控制根本不需要,因为不起作用。
lz还是仔细研究下Synchronize的含义吧,你这种写法我看到很多人使用过,可以说都是伪线程的使用,我以前也碰到过这种情况,只有多使用线程开发几次才能真正理解。