小编Ari*_*Ari的帖子

5
推荐指数
1
解决办法
482
查看次数

活动线程数不断增加

我使用executorService使用此代码一次只执行一个任务

executorService=Executors.newSingleThreadExecutor();
Run Code Online (Sandbox Code Playgroud)

Thread.activeCount()用来获取活动线程的数量,但每当我向executorService提交一个可运行的任务时,活动线程的数量会增加1.怎么可能?

我想newSingleThreadExecutor()只允许一次只执行一个任务.为什么线程数量不断增加?不应该线程数只增加一个而不是更多?

请注意,我future甚至在提交新任务之前也使用取消所有runnable的执行,并且它工作正常; 所有runnable都被打断了.但是,活动线程的数量不断增加.

编辑:这是每当我按下按钮时调用的代码(Worker只是一个实现runnable的类):

private void handle() {
    executorService=Executors.newSingleThreadExecutor();
    Worker worker=new Worker();
    future=executorService.submit(new Worker());
}
Run Code Online (Sandbox Code Playgroud)

multithreading android

5
推荐指数
1
解决办法
417
查看次数

编译器无法正确识别C++枚举

谁能解释为什么以下代码无法编译(在g ++(GCC)3.2.3 20030502(Red Hat Linux 3.2.3-49))?

struct X {
public:
   enum State { A, B, C };

   X(State s) {}
};

int main()
{
   X(X::A);
}
Run Code Online (Sandbox Code Playgroud)

我收到的消息是:

jjj.cpp:在函数'int main()'中:
jjj.cpp:10:'XX :: A'不是'struct
X'jjj.cpp 的静态成员:10:没有用于调用'X的匹配函数: :X()'
jjj.cpp:1:候选者是:X :: X(const X&)
jjj.cpp:5:X :: X(X :: State)`

这是错误的代码还是编译器错误?

Neil + Konrad解决了问题.请参阅下面对Neil的回答的评论.

c++ enums constructor temporary

4
推荐指数
2
解决办法
1843
查看次数

如何在C++中重载operator - >*

有没有办法重载->*以使用类似智能指针的对象?以下是我想做的事情.为简单起见,我不使用模板(一旦我将它用于单个固定类,我就会得到它).我可以使用指向数据成员的指针,但我似乎无法正确指向成员函数.目前,我愿意解决一个仅适用于成员函数(而不适用于数据成员)的重载.我甚至愿意接受一个只接受使用单个固定原型(例如void func())的成员函数指针的重载.

struct MyObject
{
   void MyMethod() {}
};

struct MySmartPtr {
   MyObject *p;

   // What should the prototype and function body be?
   // ??? operator->*(????) { ???? }
};

void MyFunc()
{
   MyObject obj;
   MySmartPtr obj_ptr;
   obj_ptr.p = &obj;
   void (MyObject::* member_func_ptr)() = &MyObject::MyMethod;

   // Now call obj.MyMethod() through the "smart pointer"
   (obj_ptr->*member_func_ptr)();
}
Run Code Online (Sandbox Code Playgroud)

请不要给我解决方法(例如,过载*和做(*obj_ptr.*member_func_ptr)()).我想->*按照代码段中的说明进行操作.

c++ smart-pointers operator-overloading

2
推荐指数
1
解决办法
390
查看次数