多线程优先级问题

大师兄0612 2011-10-23 11:43:47
为什么我写的多线程程序,然后给两个线程设置优先级而执行的结果仍旧是乱序的,函数执行没有错误,是不是有什么忽略的地方,最好在我的基础上能给出一个完整大程序。
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <cmath>
#define MAXLENGTH 20
#define THREAD_NUM 2

using namespace std;
/*冒泡排序方法*/
DWORD WINAPI BubbleSort(int Arr[MAXLENGTH] ){
int len = MAXLENGTH;
for (int i = 0; i < MAXLENGTH; ++i)
{
for (int j = i + 1; j <MAXLENGTH; ++j)
{
if (Arr[i] > Arr[j])
{
int temp;
temp = Arr[i];
Arr[i] = Arr[j];
Arr[j] = temp;
}
}
}
for(int j = 0; j < MAXLENGTH; ++j){
cout<<Arr[j]<<"..."<<endl;

}
cout<<endl;
return 0;
}


/*选择排序方法*/
DWORD WINAPI SelectSort(int Arr[MAXLENGTH]){
int i, j, k, temp;
for (i = 0; i < MAXLENGTH-1; i++)
{
k = i;
for(j = i + 1; j < MAXLENGTH; ++j){
if (Arr[k] > Arr[j])
{
k = j;
}
}
if (k != i)
{
temp = Arr[i];
Arr[i] = Arr[k];
Arr[k] = temp;
}
}
for(int m = 0; m < MAXLENGTH; ++m){
cout<<Arr[m]<<"......."<<endl;

}
cout<<endl;
return 0;
}

/*显示数组*/
void DisplayArray(int Arr[MAXLENGTH]){
for(int i = 0; i < MAXLENGTH; ++i){
cout<<Arr[i]<<", ";

}
cout<<endl;
}

/*设置随机数的范围*/
int random(int start,int end){
return start + (end - start) * rand() / (RAND_MAX + 1);
}

/*给数组随机赋值*/
void arrayValue(int Arr[]){
for(int i = 0; i< MAXLENGTH; i++){
Arr[i] = random(0,50);
}
}

int main(){
int Arr[MAXLENGTH];
arrayValue(Arr);
HANDLE hTread1;
HANDLE hTread2;

DWORD threadId1;
DWORD threadId2;

hTread1=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)BubbleSort, (LPVOID)Arr, 0,&threadId1);//创建线程1
SetThreadPriority(hTread1, THREAD_PRIORITY_NORMAL);

hTread2=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)SelectSort, (LPVOID)Arr, 0,&threadId2);//创建线程2;
SetThreadPriority(hTread2, THREAD_PRIORITY_ABOVE_NORMAL);


DWORD exitcode1 = STILL_ACTIVE ;
DWORD exitcode2 = STILL_ACTIVE ;

while( exitcode1 == STILL_ACTIVE || exitcode2 == STILL_ACTIVE )
{
GetExitCodeThread(hTread1, &exitcode1); //DWORD 指针类型,第二个参数返回线程的退出码
GetExitCodeThread(hTread2, &exitcode2);

}
return 0;
}

...全文
513 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2011-11-06
  • 打赏
  • 举报
回复
楼主用的是多核的计算机吧。
zzcmx2008 2011-11-06
  • 打赏
  • 举报
回复
使用信号灯,进行同步
maoxing63570 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 senliuy 的回复:]

这本书自从买了就没看过,居然还有多线程啊。多谢,回去看看去。
引用 5 楼 jha334201553 的回复:

深入浅出MFC 里面说的多线程那一章不知道对你有木有用挖,还有同一个作者写的 win32多线程xx 的书
[/Quote]
再回去看下Windows核心编程中对线程优级的解释
大师兄0612 2011-11-06
  • 打赏
  • 举报
回复
这本书自从买了就没看过,居然还有多线程啊。多谢,回去看看去。
[Quote=引用 5 楼 jha334201553 的回复:]

深入浅出MFC 里面说的多线程那一章不知道对你有木有用挖,还有同一个作者写的 win32多线程xx 的书
[/Quote]
「已注销」 2011-10-24
  • 打赏
  • 举报
回复
深入浅出MFC 里面说的多线程那一章不知道对你有木有用挖,还有同一个作者写的 win32多线程xx 的书
大师兄0612 2011-10-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 maoxing63570 的回复:]

多线程程序是无法预测其行为的,取决于cpu的调度
[/Quote]
我知道多线程的结构无法预测,但是可以通过优先级可以为线程分配cpu资源,为什么我的输出结果不是按顺序排序,要是这样的话,那优先级还有什么作用。
大师兄0612 2011-10-23
  • 打赏
  • 举报
回复
我知道多线程的结构无法预测,但是可以通过优先级可以为线程分配cpu资源,为什么我的输出结果不是按顺序排序,要是这样的话,那优先级还有什么作用。
maoxing63570 2011-10-23
  • 打赏
  • 举报
回复
许多程序员耗费着他们的青春,期望电脑算运算的结果能够精确的重现,但在多线程程序中,其结果视cpu的速度,线程的工作,cpu的忙碌程度等等因素而不同
quote:win32多线程编程
maoxing63570 2011-10-23
  • 打赏
  • 举报
回复
多线程程序是无法预测其行为的,取决于cpu的调度

65,189

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧