在c ++ 03及更早版本中禁用有关未使用参数的编译器警告我通常使用这样的代码:
#define UNUSED(expr) do { (void)(expr); } while (0)
Run Code Online (Sandbox Code Playgroud)
例如
int main(int argc, char *argv[])
{
UNUSED(argc);
UNUSED(argv);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但宏不是c ++的最佳实践,所以.c ++ 11标准是否有更好的解决方案?我的意思是我可以摆脱宏吗?
谢谢大家!
我正在尝试使用boost :: thread在C++上的线程上实现Actor计算模型.但程序在执行期间抛出奇怪的异常.异常不稳定,有时程序以正确的方式工作.
我的代码:
actor.hpp
class Actor {
public:
typedef boost::function<int()> Job;
private:
std::queue<Job> d_jobQueue;
boost::mutex d_jobQueueMutex;
boost::condition_variable d_hasJob;
boost::atomic<bool> d_keepWorkerRunning;
boost::thread d_worker;
void workerThread();
public:
Actor();
virtual ~Actor();
void execJobAsync(const Job& job);
int execJobSync(const Job& job);
};
Run Code Online (Sandbox Code Playgroud)
actor.cpp
namespace {
int executeJobSync(std::string *error,
boost::promise<int> *promise,
const Actor::Job *job)
{
int rc = (*job)();
promise->set_value(rc);
return 0;
}
}
void Actor::workerThread()
{
while (d_keepWorkerRunning) try {
Job job;
{
boost::unique_lock<boost::mutex> g(d_jobQueueMutex);
while (d_jobQueue.empty()) {
d_hasJob.wait(g);
}
job = d_jobQueue.front();
d_jobQueue.pop(); …Run Code Online (Sandbox Code Playgroud)