C ++杀死子线程停止执行主线程
C++ killing child thread stops execution of the main thread
我对定时器以及线程 (pthread) 在 C++ 中的工作方式完全感到困惑
计时器不是计时器而是时钟,你不能(我至少不能)在不杀死主线程的情况下杀死线程。
我需要的 - 一些在单独线程上每 24 小时执行一次的代码。
但是,如果应用程序需要停止它 - 我只能向它发送 SIGKILL(因为加入会等到午夜)。一旦我杀死那个线程,应用程序(主线程)似乎也会自我杀死。
我乐于接受建议。
在条件下 - 我 不能 使用 std::threads 并且我不想每天多次唤醒此线程
但对我来说最简单的方法是在不停止执行主线程的情况下终止子线程(为什么会这样??)
示例如下:
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <thread>
#include <pthread.h>
#include <signal.h>
using namespace std;
void* Logger(void* arg) {
int* thread_state = (int*)arg;
cout << "Logger started" << endl;
sleep(24 * 60 * 60);
cout << "Logger thread exiting" << endl;
pthread_exit(0);
}
int main()
{
int thread_state = 0;
pthread_t logger_t;
int rc = pthread_create(&logger_t, NULL, Logger, (void*)&thread_state);
sleep(2);
//thread_state = 1;
pthread_kill(logger_t, SIGKILL);
cout << "i wuz here" << endl;
return 0;
}
输出:
Logger started
Killed
我不知道我是怎么错过的,但如果我调用 pthread_cancel
而不是 pthread_kill
,它就可以正常工作。
我对定时器以及线程 (pthread) 在 C++ 中的工作方式完全感到困惑
计时器不是计时器而是时钟,你不能(我至少不能)在不杀死主线程的情况下杀死线程。
我需要的 - 一些在单独线程上每 24 小时执行一次的代码。
但是,如果应用程序需要停止它 - 我只能向它发送 SIGKILL(因为加入会等到午夜)。一旦我杀死那个线程,应用程序(主线程)似乎也会自我杀死。
我乐于接受建议。
在条件下 - 我 不能 使用 std::threads 并且我不想每天多次唤醒此线程
但对我来说最简单的方法是在不停止执行主线程的情况下终止子线程(为什么会这样??)
示例如下:
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <unistd.h>
#include <thread>
#include <pthread.h>
#include <signal.h>
using namespace std;
void* Logger(void* arg) {
int* thread_state = (int*)arg;
cout << "Logger started" << endl;
sleep(24 * 60 * 60);
cout << "Logger thread exiting" << endl;
pthread_exit(0);
}
int main()
{
int thread_state = 0;
pthread_t logger_t;
int rc = pthread_create(&logger_t, NULL, Logger, (void*)&thread_state);
sleep(2);
//thread_state = 1;
pthread_kill(logger_t, SIGKILL);
cout << "i wuz here" << endl;
return 0;
}
输出:
Logger started
Killed
我不知道我是怎么错过的,但如果我调用 pthread_cancel
而不是 pthread_kill
,它就可以正常工作。