| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1175 人关注过本帖
标题:为什么重复打印信息
取消只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
已结贴  问题点数:10 回复次数:6 
为什么重复打印信息
程序代码:
int main(int argc, char **argv)
{
    GetMode(&g_iMode, argc, argv);

    if (g_iMode == SERVER_MODE) // host 端
    {
        COMM_CreateServer("any", 0, ST_COMM_TestServer_EntryFunc, 2, COMM_TYPE_TCP);
        printf("sakdja\n");
        //while (TRUE);
    }
        
        ......
}
我程序中使用COMM_CreateServer创建一个 ST_COMM_TestServer_EntryFunc 线程时为什么重复打印 printf("sakdja\n");??
但是后面加上 while (TRUE); 后就不会重复打印?
搜索更多相关主题的帖子: 打印 
2010-07-02 08:01
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
程序代码:
#include <windows.h>
#include <stdio.h>
#include "u_task.h"
HANDLE test_entry_func(char *name)
{
    printf("%s\n", name);
    Sleep(1000);
    while(TRUE)
    {
        printf("%s, %d\n", __FILE__, __LINE__);
        Sleep(500);
    }
}

int main(int argc, char **argv)
{
    UINT32 ret;
    ret = TASK_CreateThread(NULL, NULL, test_entry_func, "zhong");
    printf("sakdja\n");
    //Sleep(5000);
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册


~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-07-03 00:29
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
程序代码:
int main(int argc, char **argv)
{
    UINT32 ret;
    ret = TASK_CreateThread(NULL, NULL, test_entry_func, "zhong");
    ret += 100;
    printf("sakdja %d\n", ret);
    Sleep(100);
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册


感觉多显示的 sakdja 100仅仅是printf函数处理出错,因为这个 ret 值仅仅被 ret += 100; 加过一次而已

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-07-03 00:34
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
以下是引用cnfarer在2010-7-3 16:50:29的发言:

看看u_task.h
程序代码:
UINT32 TASK_CreateThread(UINT32 *p_thread_id, void *attrib, void *entry_func, void *arg)
{
      return !(UINT32)CreateThread((LPSECURITY_ATTRIBUTES)attrib, TASK_STACK_SIZE,    \
                                  (LPTHREAD_START_ROUTINE)entry_func, arg, 0, (LPDWORD)p_thread_id);
}   
TASK_CreateThread 仅仅简单的封装下CreateThread函数,创建一个子线程而已。

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-07-03 23:00
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 7楼 lijm1989
多线程的环境 什么意思?

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-07-04 01:38
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
以下是引用lijm1989在2010-7-4 02:18:57的发言:

是用VC6么?
如果是的话,看看在Setting那里的C/C++选项中的Category中的Code Generation,你的Use run-time library的选项是什么。
如果用的是高版本的话,54掉我说的···
哇,真是您说的问题

现在选择多线程了,这个问题就没有了

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-07-04 03:28
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
以下是引用zisefengye在2010-7-5 20:52:29的发言:

我看到过Jeffrey Richter是这样封装c-runtime的_beginthreadex
typedef unsigned (__stdcall *PTHREAD_START)(void *);
#define chBEGINTHREADEX(psa, cbStack, pfnStartAddr, pvParam,\
        fdwCreate, pdwThreadId)                             \
        ((HANDLE)_beginthreadex(                            \
            (void *)            (psa),                      \
            (unsigned)          (cbStack),                  \
            (PTHREAD_START)     (pfnStar),                  \
            (void *)            (pvParam),                  \
            (unsigned)          (fdwCreate),                \   
            (unsigned *)        (pdwThreadId)))
您想说明什么问题 ?

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-07-06 23:48
快速回复:为什么重复打印信息
数据加载中...
 
   



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

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