c++多线程定时暂停

实验描述:

1、系统存在5种实体:M(恶意服务用户),G(善意服务用户),RR(随意推荐用户),MR(恶意推荐用户),GR(善意推荐用户)。

2、策略:使用服务后,随意推荐用户给出随意评分;恶意推荐用户给出刚好相反的评价;善意推荐用户给出如实评价。2分钟为一个时间段,每个用户同时只接受k个用户下载,每个模块下载基准时间为t,随着同时下载用户数量耗时线性增加。一个时间段后计算每个用户所接受到的评分,用加和平均进行计算,结果记为T。

3、实验场景:假设一部电影分成n块,系统有m个用户,m个用户初始时候随机拥有部分电影块。

4、算法描述:

(1)定义各种用户结构;

(2)设置k,t,T,n,m等参数;

(3)循环:在电影没下载完的用户中随机选择一个u1

3.1 选择在T值最高的且拥有u1所需电影块的用户u2,如果该用户超过k个下载用户,选择T次高的,以此类推;

3.2 下载完毕,u1拥有该电影块或者下载失败,根据u1种类,对u2进行评分;

3.3 时间段结束,计算T值;计算成功率或者失败率。

3.4 继续循环,直到所有用户拥有全部电影块。

5、结束

 

 

   突然觉得这题可以用一个全局变量一直加1来模拟时间,这样就不用多线程检测了~~好吧,还是不管这个了,让我们来看看如何实现多线程暂停:

 

#include

#include

#include

#include

 

const int MAX_SECOND = 1000 * 5;

 

DWORD WINAPI MyThread(PVOID pParam)

{

   DWORD dwFirstTime = GetTickCount();

   do

   {

   } while (GetTickCount() – dwFirstTime <= MAX_SECOND);

   return 0;

}

 

void delay()

{

   HANDLE hThread = CreateThread(NULL, 0, MyThread, 0, NULL, NULL);

   WaitForSingleObject(hThread, MAX_SECOND);

   CloseHandle(hThread);

}

 

int main()

{

   delay();

   printf(“1”);

   delay();

   printf(“1”);

   delay();

   printf(“1”);

   getchar();

   return 0;

}

 

   写到这里我才发现,对于上面那道题目而言,应该首先用delay传递对应的时间变量;然后最重要的是应该把main函数写成一个中断响应函数,里面可以用switch,每个下载行为产生后,给它分配一个进程让它自己倒计时,一旦倒计时结束就返回一个值,使中断响应函数做动作,因为有可能有几个下载进程的时间相互交叠;这样看来就不能用sleep或wait之类的了,或者是这个示例程序写的不对,总之新分配的进程暂停应该不能影响到主进程才对。

 

 

 

 

 

 

顺便说一句:vs2013长时间不用,刚才一用时编译报错:

“Win32Project1.exe”(Win32): 已加载“D:DocumentsVisual Studio 2012ProjectsWin32Project1DebugWin32Project1.exe”。已加载符号。

“Win32Project1.exe”(Win32): 已加载“C:WindowsSysWOW64ntdll.dll”。无法查找或打开 PDB 文件。

“Win32Project1.exe”(Win32): 已加载“C:WindowsSysWOW64kernel32.dll”。无法查找或打开 PDB 文件。

……..

程序“[9700] Win32Project1.exe”已退出,返回值为 0 (0x0)。

后来去网上搜索,其应对方法是:

 

点 调试

然后 选项和设置

右边勾上 启用源服务器支持

左边点 符号

把微软符号服务器勾

重新编译

 

测试成功~~以后试试codeblock会不会也有问题~~

 

 

最新进度:http://www.zhangshengdong.com/post/2014-07-15/40062226388

c++多线程定时暂停》上有1条评论

  1. Pingback引用通告: BZ编程小组 作品 | BZ编程小组

发表评论

电子邮件地址不会被公开。 必填项已用*标注