anchor.diff:  var
     job: TKMWorkerThreadTask;
     loopRunning: Boolean;
  +  threadName: string;
   begin
     job := nil;
     loopRunning := True;
  +  threadName := '';
   
     while loopRunning do
     begin
       TMonitor.Enter(fTaskQueue);
       try
  +      threadName := GetBaseThreadName; // get name under TMonitor, cause we access fTaskQueue
         if fTaskQueue.Count > 0 then
         begin
           job := fTaskQueue.Dequeue;
  
positive.code: 
      if job <> nil then
      begin
        NameThread(job.WorkName);
        job.Proc();
  
        if Assigned(job.Callback) then
  
negative.code: 
  function TKMWorkerThread.GetBaseThreadName: string;
  begin
    {$IFDEF DEBUG}
    Result := fWorkerThreadName + ' Jobs=' + IntToStr(fTaskQueue.Count); // Has to be synced!
    {$ELSE}
    Result := '';
    {$ENDIF}
  end;
  
  procedure TKMWorkerThread.NameThread;
  begin
    {$IFDEF DEBUG}
    NameThread(fWorkerThreadName);
    {$ENDIF}
  end;
  
  procedure TKMWorkerThread.NameThread(aThreadName: string);
  begin
    {$IFDEF DEBUG}
    if fWorkerThreadName <> '' then
      TThread.NameThreadForDebugging(aThreadName);
    {$ENDIF}
  end;
  
  