| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1061 人关注过本帖
标题:window下多线程分时操作问题 新手....
只看楼主 加入收藏
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
window下多线程分时操作问题 新手....
程序代码:
//总共5个进程  主进程输出1  Printer_ThreadOne输出2,3,4  Printer_ThreadTwo输出5
#define WIN32_LEAN_AND_MEAN  

#include <windows.h>       
#include <windowsx.h>       
#include <stdio.h>

// 宏定义 ////////////////////////////////////////////////////////////////////////////////

#define MAX_NUM 3 

// 原型 /////////////////////////////////////////////////////////////////////////////

DWORD WINAPI Printer_ThreadOne(LPVOID data);
DWORD WINAPI printer_ThreadTwo(LPVOID data);

// 函数 //////////////////////////////////////////////////////////////////////////////

DWORD WINAPI Printer_ThreadOne(LPVOID data)
{

for (int index = 0; index < 25; index++)
    {
    printf("one线程%d\n",(int)data+1);  //加一
    Sleep(500);                
    }
   
   return((DWORD)data);
} 




DWORD WINAPI printer_ThreadTwo(LPVOID data)
{
    for(int index = 0; index < 25; index++)
    {
        printf("two线程:%d\n",(int)data+2); //加二
        Sleep(500);
    }
   
    return((DWORD)data);
}

// 主函数 //////////////////////////////////////////////////////////////////////////////////

int main(void)
{

HANDLE thread_handle[MAX_NUM+1];
DWORD  thread_id[MAX_NUM+1]; 



printf("开始线程\n");


//创建3个线程
for (int index = 0; index < MAX_NUM; index++)
    {

    thread_handle[index] = CreateThread(NULL,             
                                        0,               
                                           Printer_ThreadOne,    
                                        (LPVOID)(index+1),    
                                        0,               
                                        &thread_id[index]);
    }
//创建第四的线程

    thread_handle[3] = CreateThread(NULL,             
                                    0,               
                                       printer_ThreadTwo,    
                                    (LPVOID)3,    
                                    0,           
                                    &thread_id[3]);
                                       
                                       
                                       
//主进程////////////////////////////////////////////
for (index=0; index<75; index++)
    {
    printf("主线程%d\n",1);
    Sleep(500);

    }


//关闭句柄///////////////////////////////////////
for (index=0; index<MAX_NUM; index++)
    CloseHandle(thread_handle[index]);
    CloseHandle(thread_handle[    3]);


printf("\n结束了线程\n");

return 0;

}
在输出的时候 按理是循环输出 怎么开始是是乱输出的啊?  在运行了一定时间才循环,那么开始一段时间分时操作是随机选择线程的吗? 还是我的电脑有问题啊?  就高手解答啊. 百度了一下.....未果
搜索更多相关主题的帖子: window 多线程 color 
2012-02-26 20:05
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
收藏
得分:0 
小顶一下 .......

能力 技巧
2012-02-26 22:56
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:9 
你这个多线程写的相当多线程啊。。。

多线程时间片轮转,你又加了sleep();主进程又没有卡死。加上循环。。
不能很正常的输去。。。

推荐你看看孙鑫的多线程是怎么说的吧。。




用心做一件事情就这么简单
2012-02-27 00:29
fahfuq
Rank: 2
等 级:论坛游民
帖 子:30
专家分:23
注 册:2012-1-21
收藏
得分:2 
飘过
2012-02-27 08:46
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:9 
呵呵,对多线程的操作需要谨慎。
1、第三楼说的有道理,主线程需要堵住;
2、多线程具有N多不确定性。操作系统在分配cpu时间片时,不会考虑线程内原子操作,不同地方中断,保存中断点信息不一致,都会导致线程管理时间差异;
3、cpu速度相对IO速度来讲,无异天文数字,最好使用互斥;
4、不要使用太多线程,会降低系统运行效率(pc上可能看不出来)。
2012-02-27 15:37
快速回复:window下多线程分时操作问题 新手....
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019338 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved