linux c 编程,while循环里,判断标志位的值,是变量的值是0,就打印出来,并赋值1,定时器里每1s,给变量直接赋值0,
但是定时器中修改了值之后,while里进不了if,必须要加个usleep延时才行
代码:
void signal_handler(int m)
{
printf("******m_socket_flag = %d \n", m_socket_flag);
m_socket_flag = 0;
}
int main(int argc, char *argv[])
{
signal(SIGALRM, signal_handler);
set_timer(1); //定时1s,并在1s后启动
int h;
while (1)
{
usleep(1);
if (0 == m_socket_flag)
{
h++;
printf("m_socket_flag = %d /// h = %d\n", m_socket_flag,h);
m_socket_flag = 1;
}
}
}
加入了usleep(1)延时1us,则输出正常:
m_socket_flag = 0 /// h = 1
******m_socket_flag = 1
m_socket_flag = 0 /// h = 2
******m_socket_flag = 1
m_socket_flag = 0 /// h = 3
******m_socket_flag = 1
m_socket_flag = 0 /// h = 4
******m_socket_flag = 1
m_socket_flag = 0 /// h = 5
******m_socket_flag = 1
m_socket_flag = 0 /// h = 6
******m_socket_flag = 1
m_socket_flag = 0 /// h = 7
******m_socket_flag = 1
m_socket_flag = 0 /// h = 8
去掉usleep之后,就进不了if了:
m_socket_flag = 0 /// h = 1
******m_socket_flag = 1
******m_socket_flag = 0
******m_socket_flag = 0
******m_socket_flag = 0
******m_socket_flag = 0
******m_socket_flag = 0
******m_socket_flag = 0
******m_socket_flag = 0
请教各位,这是什么原因呢?一是想知道原因,二是发现即使有usleep的情况下,时间长了,也有一定概率,不能进if