newしたクラスをdeleteしたい。
Posted: 2015年10月25日(日) 14:57
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
class class2 {
public:
class2() { printf("%p: class2 ctor\n", this); }
~class2() { printf("%p: class2 dtor\n", this); }
};
class class1 {
public:
class1() { printf("%p: class1 ctor\n", this); }
~class1() { printf("%p: class1 dtor\n", this); }
void func(); // thread1 を起動する
void func2(); // class2 のオブジェクトを delete
void func3(); // thread1 を停止する
static void *thread1(void *param); // class2 のオブジェクトを new
private:
pthread_t tid;
class2 *c2;
bool cancelThread;
};
void class1::func()
{
pthread_create(&tid, 0, thread1, this);
}
void class1::func2()
{
//class2のいろいろな処理をしてある程度時間がたって必要がなくなったので
//class2をdeleteしたい。
delete c2;
}
void class1::func3()
{
cancelThread = true;
pthread_join(tid, 0);
}
void *class1::thread1(void *param)
{
printf("thread1 started\n");
class1 *c1 = (class1 *)param;
class2 *__class2;
__class2 = new class2;
c1->c2 = __class2;
for (int t = 10; t >= 0 && !c1->cancelThread; t--) {
printf("thread1 running %d\n", t);
sleep(1);
}
printf("thread1 stopped\n");
}
int main()
{
class1 obj;
obj.func();
sleep(3);
obj.func2();
obj.func3();
}
#include <stdio.h>
#include <windows.h>
class class2 {
public:
class2() { printf("%p: class2 ctor\n", this); }
~class2() { printf("%p: class2 dtor\n", this); }
};
class class1 {
public:
class1() { printf("%p: class1 ctor\n", this); }
~class1() { printf("%p: class1 dtor\n", this); }
void func(); // thread1 を起動する
void func2(); // class2 のオブジェクトを delete
void func3(); // thread1 を停止する
static DWORD WINAPI thread1(void *param); // class2 のオブジェクトを new
private:
HANDLE th;
DWORD tid;
class2 *c2;
bool cancelThread;
};
void class1::func()
{
cancelThread = false;
th = CreateThread(NULL, 0, thread1, this, 0, &tid);
}
void class1::func2()
{
//class2のいろいろな処理をしてある程度時間がたって必要がなくなったので
//class2をdeleteしたい。
delete c2;
}
void class1::func3()
{
cancelThread = true;
WaitForSingleObject(th, INFINITE);
}
DWORD WINAPI class1::thread1(void *param)
{
printf("thread1 started\n");
class1 *c1 = (class1 *)param;
class2 *__class2;
__class2 = new class2;
c1->c2 = __class2;
for (int t = 10; t >= 0 && !c1->cancelThread; t--) {
printf("thread1 running %d\n", t);
Sleep(1000);
}
printf("thread1 stopped\n");
return 0;
}
int main()
{
class1 obj;
obj.func();
Sleep(3000);
obj.func2();
obj.func3();
}