真无聊一人 2020-12-10 09:20 采纳率: 100%
浏览 72
已采纳

MFC多线程,线程函数是全局的,在线程里调用函数时,函数里的if语句无法执行

有一个链表,链表里每个节点的数据是当作参数传入要调用的函数里。每次循环,函数执行时间超过三秒就返回,到下一个节点执行。三个函数都是使用if语句来判断时间。

线程通过循环来遍历链表,当链表里只有一个节点时,函数里的if判断就可以执行。

但是有两个以上的节点时,只有第一个节点的if语句可以被执行,后面的都被忽略了,但是时间还是对的。

若第一个节点被撤销,下一个节点的if语句就可以执行了。

这是为什么呢555救救孩子实在是不懂

//线程调用的函数1,函数1在类中
void MyDialog::process_a(int i, int a, int PID)
{
    //开始计时
	clock_t time_begin = clock();	
	
	for (i; i < 10; i++) {
        //时间
		clock_t time_end = clock();

        如果时间差>3000,保存数据后退出
		if (ROUND(time_end - time_begin)>3000) {
			return;	//程序结束
				}
			}
		}

		a += 10;
		Sleep(1000);
	}

	//程序已运行完毕,从链表中删除
	if (i == 10) {
		DeleteProcess(PID);
	}
}



//线程调用的函数2,同理于函数1
void MyDialog::process_a(int i, int b, int PID)
{
    //开始计时
	clock_t time_begin = clock();	
	
	for (i; i < 10; i++) {
        //时间
		clock_t time_end = clock();

        如果时间差>3000,保存数据后退出
		if (ROUND(time_end - time_begin)>3000) {
			return;	//程序结束
				}
			}
		}

		b += 22;
		Sleep(1000);
	}

	//程序已运行完毕,从链表中删除
	if (i == 10) {
		DeleteProcess(PID);
	}
}



//线程函数
DWORD WINAPI Dispatchy_RR(LPVOID *arg)
{
    //传入对话框类的指针
	MyDialog *dialog = (MyDialog*)arg;

	CPCB *pCurrent = NULL;
    
    //当前指针指向链表头节点
	pCurrent = dialog->phead;

    //当节点不为0时
	while (dialog->nPCB > 0) {
		WaitForSingleObject(semp, INFINITE);

    	int index = pCurrent->process_mark;
		int i = pCurrent->i;
		int a = pCurrent->a;
		int PID = pCurrent->PID;
		
        //选择函数执行
		switch (index) {
		case 1:
			dialog->process_a(i, a, PID);
			break;

		case 2:
			dialog->process_b(i, a, PID);
			break;
    	}

		ReleaseSemaphore(semp, 1, NULL);
        
        //下一个节点
		pCurrent = pCurrent->next;
	}
	return 0;
}
  • 写回答

6条回答 默认 最新

  • yemat 2020-12-10 13:37
    关注

    那你断点一下获取的时间,看看

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 MATLAB代码求涡量
  • ¥100 采用栈和深度优先算法对我的代码进行修改显示路径
  • ¥15 pointnet2包安装
  • ¥20 射频功率问题,解答者有酬谢!
  • ¥80 构建降雨和积水的预测模型
  • ¥15 #Qt Transform setTransform()在鼠标拖动移动视角是一致在原地不动,无法变换视角(细微观察似乎视图有在原地抖动),无法变换视角(细微观察似乎视图有在原地抖动)
  • ¥50 如何利用无人机拍摄的数码照片测量鸟卵的长短径
  • ¥100 github贡献者给与奖励
  • ¥15 使用DS18B20+ESP8266获取温度数据返回-127.00
  • ¥15 odbc代码新增sqlserver数据源