xref: /haiku/src/preferences/repositories/TaskTimer.h (revision 1e60bdeab63fa7a57bc9a55b032052e95a18bd2c)
1 /*
2  * Copyright 2017 Haiku Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Brian Hill
7  */
8 #ifndef TASKTIMER_H
9 #define TASKTIMER_H
10 
11 
12 #include <Alert.h>
13 #include <Invoker.h>
14 #include <Looper.h>
15 #include <Message.h>
16 #include <MessageRunner.h>
17 #include <Messenger.h>
18 #include <String.h>
19 
20 #include "RepoRow.h"
21 
22 class TaskTimer;
23 class TaskLooper;
24 
25 
26 typedef struct {
27 		RepoRow*		rowItem;
28 		int32			taskType;
29 		BString			name, taskParam;
30 		thread_id		threadId;
31 		TaskLooper*		owner;
32 		BString			resultName, resultErrorDetails;
33 		TaskTimer*		fTimer;
34 } Task;
35 
36 
37 class TaskTimer : public BLooper {
38 public:
39 							TaskTimer(const BMessenger& target, Task* owner);
40 							~TaskTimer();
41 	virtual bool			QuitRequested();
42 	virtual void			MessageReceived(BMessage*);
43 	void					Start(const char* name);
44 	void					Stop(const char* name);
45 
46 private:
47 	int32					_NextAlertStackCount();
48 
49 	int32					fTimeoutMicroSeconds;
50 	bool					fTimerIsRunning;
51 	BString					fRepositoryName;
52 	BMessenger				fReplyTarget;
53 	BMessenger				fMessenger;
54 	BMessageRunner*			fMessageRunner;
55 	BMessage				fTimeoutMessage;
56 	BAlert*					fTimeoutAlert;
57 	BInvoker				fTimeoutAlertInvoker;
58 	Task*					fOwner;
59 };
60 
61 
62 #endif
63