mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-05-16 21:12:31 -04:00
Addition of next stage of new FileTransfer Code:
* Completed rough ftExtraList class (with Test Case) * Added data flow interface (ftData.h) * Added ftDataMultiplex (server + client modules). * Finished parts of ftcontroller / ftserver. * Minor Tweaks to ftTransferModules interface for compilation. Related Changes in other parts of the code: * Added new Job/Queue Thread Class. * Added more user-friendly directory functions. * Added FileInfo print operator. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@650 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
parent
a9bda83565
commit
79727897dd
19 changed files with 1245 additions and 106 deletions
|
@ -26,6 +26,7 @@
|
|||
|
||||
|
||||
#include "rsthreads.h"
|
||||
#include <unistd.h> /* for usleep() */
|
||||
|
||||
extern "C" void* rsthread_init(void* p)
|
||||
{
|
||||
|
@ -56,4 +57,43 @@ pthread_t createThread(RsThread &thread)
|
|||
}
|
||||
|
||||
|
||||
RsQueueThread::RsQueueThread(uint32_t min, uint32_t max, double relaxFactor )
|
||||
:mMinSleep(min), mMaxSleep(max), mRelaxFactor(relaxFactor)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
void RsQueueThread::run()
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
bool doneWork = false;
|
||||
while(workQueued() && doWork())
|
||||
{
|
||||
doneWork = true;
|
||||
}
|
||||
time_t now = time(NULL);
|
||||
if (doneWork)
|
||||
{
|
||||
mLastWork = now;
|
||||
mLastSleep = (uint32_t)
|
||||
(mMinSleep + (mLastSleep - mMinSleep) / 2.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
uint32_t deltaT = now - mLastWork;
|
||||
double frac = deltaT / mRelaxFactor;
|
||||
|
||||
mLastSleep += (uint32_t)
|
||||
((mMaxSleep-mMinSleep) * (frac + 0.05));
|
||||
if (mLastSleep > mMaxSleep)
|
||||
{
|
||||
mLastSleep = mMaxSleep;
|
||||
}
|
||||
}
|
||||
|
||||
usleep(1000 * mLastSleep);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue