首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++ 11中的睡眠排序

c++ 11中的睡眠排序
EN

Stack Overflow用户
提问于 2012-09-08 04:18:46
回答 5查看 1.5K关注 0票数 3

伙计们,我在考虑一种排序方法,叫做睡眠排序

代码语言:javascript
复制
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(int c, char **v)
{
    while (--c > 1 && !fork());
    sleep(c = atoi(v[c]));
    printf("%d\n", c);
    wait(0);
    return 0;
}

我不明白一件事,在c++ 11中什么是fork等价物?我的意思是新版本的c++?i可以写这样的等待函数

代码语言:javascript
复制
void wait ( int seconds ){
    clock_t endwait;
    endwait = clock () + seconds * CLOCKS_PER_SEC ;
    while (clock() < endwait) {}
}

但是fork()又如何呢?我尝试了下面的代码

代码语言:javascript
复制
#include<iostream>
#include<time.h>
using namespace std;;

void wait ( int seconds ){
    clock_t endwait;
    endwait = clock () + seconds * CLOCKS_PER_SEC ;
    while (clock() < endwait) {}
}

void Sort(int c,int a[])
{
    while(--c>1)
    {
        wait(c=a[c]);
        cout<<c<<"  ";
    }
 }

int main()
{
    int a[]={1, 3, 2, 11, 6, 4};
    int c=5;
    Sort(c,a);
    wait(0);

    return 0;
}

但它没有给我排序的输出,它的输出像6 4 1和结束,所以请告诉我如何纠正它?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-08 05:47:53

下面是一个使用Win32的C++实现:

代码语言:javascript
复制
#include <windows.h>
#include <iostream>

using namespace std;

DWORD threadFunc(LPVOID param)
{
    long val = (long)param;
    Sleep((int)val * 1000);
    cout << val << " ";
    return 0;
}

int main()
{
    HANDLE handles[6];
    int arr[] = {1, 3, 2, 11, 6, 4};

    for(int i = 0; i < 6; i++)
    {
        handles[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)&threadFunc, 
                                  (LPVOID)arr[i], 0, NULL);
    }

    WaitForMultipleObjects(6, handles, 1, INFINITE);
}
票数 0
EN

Stack Overflow用户

发布于 2012-09-08 04:32:58

您不能像在wait()函数中那样简单地延迟;这是通过为每个参数创建一个新进程(通过fork())并让每个参数并行睡眠来实现的;您的建议将使每个元素连续睡眠,从而不会给人一种排序的错觉。

至于fork -- what is fork equivalent in c++ 11? ()并不是特定于C或C++的;它是操作系统提供的函数。

票数 3
EN

Stack Overflow用户

发布于 2012-09-08 04:33:27

你还没明白重点。等待必须并行运行(由fork触发,它为每个项目创建一个新线程)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12324822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档