我是多线程编程的新手,所以这个问题可能看起来有点傻,Follow是我的代码,我想尝试2个帖子:
import os
import csv
import pymysql
import pymysql.cursors
d=open('c:/Users/dasa17/Desktop/pylearn/Roster.csv', 'w')
c=csv.writer(d)
Connection = pymysql.connect(host='xxxxx', user='xxxxx', password='xxxx',
db='xxxx',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor )
a=Connection.cursor()
a.execute("select statement")
data=a.fetchall()
for item in data:
c.writerow(item)
a.close()
d.close()
Connection.close()
问题是struct sigaction S1,S2;
struct itimerval T1,T2;
void Function1(){
cout<<"Function1 "<<endl;
}
void Function2(){
cout<<"Function2 "<<endl;
}
void Thread_Function(){
int t=70000;
memset (&s2, 0, sizeof (s2));
s2.sa_handler = &Function2;
sigaction (SIGALRM, &s2, NULL);
sigemptyset(&s2.sa_mask);
s2.sa_flags = 0;
T2.it_value.tv_sec = 0;
T2.it_value.tv_usec =t;
T2.it_interval.tv_sec =0;
T2.it_interval.tv_usec =t;
setitimer (ITIMER_REAL, &T2, NULL);
}
int main(){
int t=50000;
memset (&s1, 0, sizeof (s1));
s1.sa_handler = &Function1;
sigaction (SIGALRM, &s1, NULL);
sigemptyset(&s1.sa_mask);
s1.sa_flags = 0;
T1.it_value.tv_sec = 0;
T1.it_value.tv_usec =t;
T1.it_interval.tv_sec =0;
T1.it_interval.tv_usec =t;
setitimer (ITIMER_REAL, &T1, NULL);
thread t1(Thread_Function);
}
没有执行,换句话说我无法在输出中看到Function1
答案 0 :(得分:1)
答案 1 :(得分:0)
信号与线程不兼容。
它们也不适用于每个线程,但每个进程。你正在做的是首先将SIGALRM信号处理程序设置为Function1
,然后启动一个线程,然后覆盖处理程序以调用Function2
。
即使您有每线程信号处理程序,信号也会发送到整个进程。所以一个随机线程将处理信号,所有其他线程不会。
您可以使用pthread_sigmask指定要处理信号的线程。但总的来说,混合信号和多线程根本不能很好地工作。
在这里你有一些类似的问题,可能会更多地阐明这一点。他们可能会谈论pthread
而不是std::thread
,但问题是相同的。