注册 登录
编程论坛 C++教室

请教:多线程的问题?(Linux OS)

mini_peng 发布于 2014-12-21 00:24, 412 次点击
问题:子线程(void * thread)运行着端口监听程序,且工作正常。但为何主程序里的while(1){.....}只执行一次而不是永久循环下去?(dlog.txt文件中只有一行数据,正常情况下应该有多行才对。)
我的本意是想一个线程执行TCP端口监听并执行接收的指令,而主线程同时在不停地接收数据。两个线程中都有一个while(1){......}。
源码如下:

int main()
{
        pthread_t tid;               
        printf("this is  main thread.\n");
        pthread_create(&tid, NULL, thread, NULL);
        //pthread_join(tid, NULL);
        
        printf("the Server listening......\n");

        while(1)
        {
                //printf("kk\n");
                system("date >> dlog.txt");
                sleep(1000);
        }    //经过测试,只有主线程不结束,子线程才有效。
        
        return 0;

}
//------------------------------------------------

void *thread(void *vargp)
{        
        printf("this is  second thread.\n");
        tcp_svr_Listen_fun();
        
        return NULL;
}
2 回复
#2
天使梦魔2014-12-21 15:01
没看出什么。
但有一点,linux里只有所谓的纤程概念,现在windows里也有但只是为了将linux移植过来而弄得一个东西。
纤程和线程的区别是它并非抢占式,而是程序自己不停的释放cpu资源以达到模拟多线程。具体看你的内核版本,我不知道新版本的linux是否有新特性。
这意味着仅仅是仿多线程,可能出在死循环上,也可能出在函数的各种中断代码。
你需要查询你linux的发行版说明,如果某方面没改动会给你提供内核版本号手册
#3
mini_peng2014-12-21 23:08
谢谢,我用的是MAC   OSX10.9,

不过,你说的 linux只有纤程概念。这个我要查查。我还以为是线程呢。

我运行的程序,在后面看有2个线程。不知是线程还是纤程。

[ 本帖最后由 mini_peng 于 2014-12-21 23:10 编辑 ]
1