C++ 中断主线程并要求它做一些事情
我想知道是否可以中断主线程并要求它执行一些回调。主线程应该在完成回调后继续它正在做的事情 例如,我们有两个线程t1和m1(主线程)。t1将中断m1(主线程),并要求它调用带有一些参数的函数。m1(主线程)将停止它之前所做的工作,并开始执行该函数。函数完成后,它将返回到之前的操作C++ 中断主线程并要求它做一些事情,c++,c,multithreading,asynchronous,C++,C,Multithreading,Asynchronous,我想知道是否可以中断主线程并要求它执行一些回调。主线程应该在完成回调后继续它正在做的事情 例如,我们有两个线程t1和m1(主线程)。t1将中断m1(主线程),并要求它调用带有一些参数的函数。m1(主线程)将停止它之前所做的工作,并开始执行该函数。函数完成后,它将返回到之前的操作 我想复制硬件中断的功能。我有一个线程从文件中读取数据。然后它应该要求主线程调用一个函数。主线程将执行某些操作。它应该停止执行并开始执行该函数。在完成它之后,主线程应该继续它正在做的事情,我认为这是一种干净的方式,将t1添
我想复制硬件中断的功能。我有一个线程从文件中读取数据。然后它应该要求主线程调用一个函数。主线程将执行某些操作。它应该停止执行并开始执行该函数。在完成它之后,主线程应该继续它正在做的事情,我认为这是一种干净的方式,将t1添加到一个操作队列中,t2在其处理循环中可以安全地开始做其他事情的点进行检查 在POSIX系统上,可以使用信号。例如,下面启动第二个线程,当主线程正在执行其他工作时,第二个线程向其发送一个
SIGUSR1
信号。主线程处理它并恢复操作
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <signal.h>
void* other_thread(void* main_thread) {
printf("other_thread: %x\n", pthread_self());
usleep(250*1000);
printf("sending SIGUSR1 to main thread...\n");
pthread_kill((pthread_t) main_thread, SIGUSR1);
return NULL;
}
void my_handler(int signal) {
printf("my_handler: %x\n", pthread_self());
sleep(2);
printf("back to main\n");
}
int main(int argc, char**argv) {
signal(SIGUSR1, my_handler);
pthread_t thread1;
pthread_create(&thread1, NULL, other_thread, pthread_self());
printf("main: %x\n", pthread_self());
int x = 0;
while (1) {
// sleep(1), or do some work, or:
x++;
if (x % 10000000 == 0) printf("boo\n");
}
}
#包括
#包括
#包括
#包括
void*其他线程(void*主线程){
printf(“其他线程:%x\n”,pthread_self());
usleep(250*1000);
printf(“将SIGUSR1发送到主线程…\n”);
pthread_kill((pthread_t)主线程,SIGUSR1);
返回NULL;
}
无效my_处理程序(int信号){
printf(“my_处理程序:%x\n”,pthread_self());
睡眠(2);
printf(“返回主\n”);
}
int main(int argc,字符**argv){
信号(SIGUSR1,我的_处理器);
pthread_t thread1;
pthread_create(&thread1,NULL,other_thread,pthread_self());
printf(“主:%x\n”,pthread_self());
int x=0;
而(1){
//睡觉(1),或做一些工作,或:
x++;
如果(x%10000000==0)printf(“boo\n”);
}
}
基本上没有,但实际上也没有。只需准确编写您想要的代码即可。你遇到了什么障碍?(如果您需要更多帮助,了解您正在使用的线程库或标准将非常有用。C++11?POSIX?Windows?)基本上我需要硬件中断的功能。我有一个线程从文件中读取数据。然后它应该要求主线程调用一个函数。主线程将执行某些操作。它应该停止执行并开始执行该函数。完成后,主线程应该继续它正在做的事情。我现在正在使用windows库。在我更新了我的问题之后,我将为linux(pthread)做这件事。请看基本上我想要什么硬件中断。我有一个线程从文件中读取数据。然后它应该要求主线程调用一个函数。主线程将执行某些操作。它应该停止执行并开始执行该函数。在完成它之后,主线程应该继续使用queue is选项进行操作,但我要寻找的是像Linux上的硬件doesOn那样的中断,我想试着看看使用它是否有帮助。“` SIGUSR1和SIGUSR2信号被预留给您,供您以任何方式使用。如果在接收信号的程序中为它们编写信号处理程序,它们对于简单的进程间通信非常有用。”