c++ - Locking ostream output in macro -


i have code proprietary logger:

#define log getstream() 

where getstream returns std::ostream. user do:

log << "text"; 

i need thread safe avoid this:

#define end unlock(); #define log lock(); getstream() << "text" << end; 

since user need add "end":

log << "text" << end; 

any ideas?

remark: handle carriage return using this.

one way solve use function-style macros, incorporate locking/unlocking using c++ block , scoping:

#define log(output)               \                                \     {                             \         lockingclass lock;        \         getstream() << output;    \     } while (0) 

the lockingclass (or whatever want name it) scoped lock, locks stream on construction, , unlocks in on destruction.

could used e.g.

log("hello variable " << variable); 

can't use expressions containing comma though, preprocessor interpret commas argument separator macro. solved variadic macros.


Comments

Popular posts from this blog

How has firefox/gecko HTML+CSS rendering changed in version 38? -

javascript - Complex json ng-repeat -

jquery - Cloning of rows and columns from the old table into the new with colSpan and rowSpan -