真无聊一人 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 qgcomp混合物线性模型分析的代码出现错误:Model aliasing occurred
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥15 小红薯封设备能解决的来
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'
  • ¥15 vue+element项目中多tag时,切换Tab时iframe套第三方html页面需要实现不刷新