4707f7bb54
2008-12-08 10:12:55 +0100 cmc r264975 : #i96203# protect with ifdefs to avoid unused symbol on mac 2008-12-05 12:23:47 +0100 cmc r264898 : CWS-TOOLING: rebase CWS cmcfixes51 to trunk@264807 (milestone: DEV300:m37) 2008-12-01 14:45:17 +0100 cmc r264606 : #i76655# ehlos apparently required 2008-11-28 17:49:30 +0100 cmc r264567 : #i96655# remove newly unused method 2008-11-28 10:41:28 +0100 cmc r264531 : #i96647# better ppc-bridges flushCode impl 2008-11-27 12:58:40 +0100 cmc r264478 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:32:49 +0100 cmc r264476 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 12:26:02 +0100 cmc r264475 : #i96655# redundant old table export helpers 2008-11-27 11:49:06 +0100 cmc r264473 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:38:35 +0100 cmc r264471 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:14:21 +0100 cmc r264467 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 11:06:22 +0100 cmc r264464 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:58:18 +0100 cmc r264462 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:41:44 +0100 cmc r264461 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:19:24 +0100 cmc r264460 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:13:39 +0100 cmc r264459 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 10:06:14 +0100 cmc r264458 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:59:54 +0100 cmc r264457 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:52:51 +0100 cmc r264456 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:48:26 +0100 cmc r264454 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:40:20 +0100 cmc r264452 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:35:26 +0100 cmc r264451 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:31:00 +0100 cmc r264450 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 09:24:08 +0100 cmc r264449 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:26:15 +0100 cmc r264443 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:21:01 +0100 cmc r264442 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-27 00:09:40 +0100 cmc r264441 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:51:56 +0100 cmc r264440 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 23:49:09 +0100 cmc r264439 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:09:54 +0100 cmc r264432 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 18:07:40 +0100 cmc r264431 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:28:02 +0100 cmc r264429 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:27:39 +0100 cmc r264428 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 17:18:36 +0100 cmc r264426 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 16:22:16 +0100 cmc r264415 : #i96624# make implicit braces and brackets explicit to avoid warnings 2008-11-26 16:00:23 +0100 cmc r264409 : #i90426# remove warnings from svtools 2008-11-26 15:59:17 +0100 cmc r264408 : #i90426# remove warnings 2008-11-26 15:47:32 +0100 cmc r264404 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:46:57 +0100 cmc r264394 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:19:50 +0100 cmc r264387 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:15:26 +0100 cmc r264386 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 14:11:26 +0100 cmc r264384 : #i96084# confirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:44:23 +0100 cmc r264380 : #i96084# comfirm existing logic with explicit brackets to remove new gcc warnings 2008-11-26 13:12:24 +0100 cmc r264372 : #i96604# silence new warnings 2008-11-26 12:35:02 +0100 cmc r264369 : #i96203# make qstarter work in 3-layer land 2008-11-26 12:33:04 +0100 cmc r264368 : #i96170# ensure gtypes are up and running
183 lines
4.7 KiB
C++
183 lines
4.7 KiB
C++
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* $RCSfile: TimerBasedTaskExecution.cxx,v $
|
|
* $Revision: 1.5 $
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
#include "precompiled_sd.hxx"
|
|
|
|
#include "tools/TimerBasedTaskExecution.hxx"
|
|
#include "tools/AsynchronousTask.hxx"
|
|
#include <tools/time.hxx>
|
|
#include <osl/diagnose.h>
|
|
#include <boost/weak_ptr.hpp>
|
|
|
|
#undef VERBOSE
|
|
|
|
namespace sd { namespace tools {
|
|
|
|
/** Used by the shared_ptr instead of the private destructor.
|
|
*/
|
|
class TimerBasedTaskExecution::Deleter
|
|
{
|
|
public:
|
|
void operator() (TimerBasedTaskExecution* pObject)
|
|
{
|
|
delete pObject;
|
|
}
|
|
};
|
|
|
|
|
|
|
|
|
|
::boost::shared_ptr<TimerBasedTaskExecution> TimerBasedTaskExecution::Create (
|
|
const ::boost::shared_ptr<AsynchronousTask>& rpTask,
|
|
sal_uInt32 nMillisecondsBetweenSteps,
|
|
sal_uInt32 nMaxTimePerStep)
|
|
{
|
|
::boost::shared_ptr<TimerBasedTaskExecution> pExecution(
|
|
new TimerBasedTaskExecution(rpTask,nMillisecondsBetweenSteps,nMaxTimePerStep),
|
|
Deleter());
|
|
// Let the new object have a shared_ptr to itself, so that it can
|
|
// release itself when the AsynchronousTask has been executed
|
|
// completely.
|
|
pExecution->SetSelf(pExecution);
|
|
return pExecution;
|
|
}
|
|
|
|
|
|
|
|
|
|
void TimerBasedTaskExecution::Release (void)
|
|
{
|
|
maTimer.Stop();
|
|
mpSelf.reset();
|
|
}
|
|
|
|
|
|
|
|
|
|
//static
|
|
void TimerBasedTaskExecution::ReleaseTask (
|
|
const ::boost::weak_ptr<TimerBasedTaskExecution>& rpExecution)
|
|
{
|
|
if ( ! rpExecution.expired())
|
|
{
|
|
try
|
|
{
|
|
::boost::shared_ptr<tools::TimerBasedTaskExecution> pExecution (rpExecution);
|
|
pExecution->Release();
|
|
}
|
|
catch (::boost::bad_weak_ptr)
|
|
{
|
|
// When a bad_weak_ptr has been thrown then the object pointed
|
|
// to by rpTask has been released right after we checked that it
|
|
// still existed. Too bad, but that means, that we have nothing
|
|
// more do.
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
TimerBasedTaskExecution::TimerBasedTaskExecution (
|
|
const ::boost::shared_ptr<AsynchronousTask>& rpTask,
|
|
sal_uInt32 nMillisecondsBetweenSteps,
|
|
sal_uInt32 nMaxTimePerStep)
|
|
: mpTask(rpTask),
|
|
maTimer(),
|
|
mpSelf(),
|
|
mnMaxTimePerStep(nMaxTimePerStep)
|
|
{
|
|
Link aLink(LINK(this,TimerBasedTaskExecution,TimerCallback));
|
|
maTimer.SetTimeoutHdl(aLink);
|
|
maTimer.SetTimeout(nMillisecondsBetweenSteps);
|
|
maTimer.Start();
|
|
}
|
|
|
|
|
|
|
|
|
|
TimerBasedTaskExecution::~TimerBasedTaskExecution (void)
|
|
{
|
|
maTimer.Stop();
|
|
}
|
|
|
|
|
|
|
|
|
|
void TimerBasedTaskExecution::SetSelf (
|
|
const ::boost::shared_ptr<TimerBasedTaskExecution>& rpSelf)
|
|
{
|
|
if (mpTask.get() != NULL)
|
|
mpSelf = rpSelf;
|
|
}
|
|
|
|
|
|
|
|
|
|
IMPL_LINK(TimerBasedTaskExecution,TimerCallback, Timer*,EMPTYARG)
|
|
{
|
|
if (mpTask.get() != NULL)
|
|
{
|
|
if (mpTask->HasNextStep())
|
|
{
|
|
// Execute as many steps as fit into the time span of length
|
|
// mnMaxTimePerStep. Note that the last step may take longer
|
|
// than allowed.
|
|
sal_uInt32 nStartTime (Time().GetMSFromTime());
|
|
#ifdef VERBOSE
|
|
OSL_TRACE("starting TimerBasedTaskExecution at %d", nStartTime);
|
|
#endif
|
|
do
|
|
{
|
|
mpTask->RunNextStep();
|
|
sal_uInt32 nDuration (Time().GetMSFromTime()-nStartTime);
|
|
#ifdef VERBOSE
|
|
OSL_TRACE("executed step in %d", nDuration);
|
|
#endif
|
|
if (nDuration > mnMaxTimePerStep)
|
|
break;
|
|
}
|
|
while (mpTask->HasNextStep());
|
|
#ifdef VERBOSE
|
|
OSL_TRACE("TimerBasedTaskExecution sleeping");
|
|
#endif
|
|
maTimer.Start();
|
|
}
|
|
else
|
|
mpSelf.reset();
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
} } // end of namespace ::sd::tools
|
|
|