jobs.patch

Jan DolinĂ¡r, 09/18/2013 07:49 PM

Download (2.64 KB)

View differences:

uppsrc/Skylark/App.cpp (working copy)
186 186
	main_pid = getpid();
187 187
	quit = false;
188 188
	
189
	if(jobs.GetCount()){
190
		jobThreadActive = true;
191
		Thread::Start(callback(this, &SkylarkApp::JobThread));
192
	}
193
	
189 194
	IpAddrInfo ipinfo;
190 195
	ipinfo.Execute(ip, port, IpAddrInfo::FAMILY_IPV4);
191 196
//	addrinfo *addr = ipinfo.GetResult();
......
310 315
	prefork = Ini::prefork;
311 316
	timeout = Ini::timeout;
312 317
	caching = Ini::caching;
318
	jobThreadActive = false;
313 319
}
314 320

  
315 321
SkylarkApp::~SkylarkApp()
uppsrc/Skylark/Jobs.cpp (working copy)
1
#include "Skylark.h"
2

  
3
namespace Upp {
4

  
5
SkylarkApp& SkylarkApp::AddJob(Callback cb, int period)
6
{
7
	ASSERT(!jobThreadActive);
8
	if(!jobThreadActive)
9
		jobs.Add(JobInfo(cb, period));
10
	return *this;
11
}
12

  
13
void SkylarkApp::JobThread()
14
{
15
	SKYLARKLOG("Job thread started");
16
	for(;;) {
17
		if(quit)
18
			break;
19
		Time now = GetSysTime();
20
		for(int i = 0; i < jobs.GetCount(); i++){
21
			if (jobs[i].next <= now){
22
				SKYLARKLOG("Executing job #"<<i);
23
				jobs[i].cb.Execute();
24
				jobs[i].next = now + jobs[i].period;
25
				break;
26
			}
27
		}
28
		now = GetSysTime();
29
		Time next = now + 60;
30
		for(int i = 0; i < jobs.GetCount(); i++)
31
			next = min(jobs[i].next, next);
32
		if (next>now)
33
			Sleep((next-now)*1000);
34
	}
35
	SKYLARKLOG("Job thread finished");
36
}
37

  
38
}
uppsrc/Skylark/Skylark.h (working copy)
71 71

  
72 72
	void         FinalizeViews();
73 73

  
74
	struct JobInfo : Moveable<JobInfo> {
75
		int period;
76
		Callback cb;
77
		Time next;
78
		JobInfo(Callback cb, int period) : period(period), cb(cb), next(0) {}
79
	};
80

  
81
	Vector<JobInfo> jobs;
82
	bool jobThreadActive;
83
	void JobThread();
84

  
74 85
	static SkylarkApp *app;
75 86

  
76 87
#ifdef PLATFORM_WIN32
......
91 102
	virtual void BadRequest(Http& http, const BadRequestExc& e);
92 103
	virtual void TemplateError(Http& http, const TemplateExc& e);
93 104

  
105
	SkylarkApp& AddJob(Callback cb, int period);
106

  
94 107
	virtual void WorkThread();
95 108
	
96 109
	void RunThread();
uppsrc/Skylark/Skylark.upp (working copy)
17 17
	Http.cpp,
18 18
	Session.cpp,
19 19
	Dispatch.cpp,
20
	Jobs.cpp,
20 21
	StdLib.icpp,
21 22
	Util readonly separator,
22 23
	Static.icpp,