首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将向量存储和写入队列c++

将向量存储和写入队列c++
EN

Stack Overflow用户
提问于 2020-08-19 12:44:18
回答 1查看 39关注 0票数 1
代码语言:javascript
复制
#include <iostream>
#include <queue>
#include <thread>
#include <process.h>
#include <windows.h>
#include <stdlib.h>

int g_Width = 100;

std::queue<std::vector<unsigned short>> BufferQueue;

bool dataRead = false;

unsigned short* g_pImgBuf = NULL;


unsigned int _stdcall Write(void* arg) {


    std::vector<unsigned short> data;
    data.reserve(g_Width);


    int line = 0;
    while (dataRead)
    {
        if (!dataRead)
            break;
        for (int i = 0; i < g_Width; i++) {
            data.push_back(i);    
        }

   

        BufferQueue.push(data);
        data.clear();

    }

    _endthreadex(0);
    return 0;

}

unsigned  int _stdcall Read(void* arg) {


    std::vector<unsigned short> data;
    data.reserve(g_Width);


    unsigned short color = 0;

    int line = 0;

    while (dataRead)
    {
        g_pImgBuf = new unsigned short[g_Width];


        if (!BufferQueue.empty()) {
            data = BufferQueue.front();
            BufferQueue.pop();

        }
        else if (!dataRead)
            break;
        else {
            continue;
        }

      

        for (int j = 0; j < g_Width; j++) {
            color = data[j];
            color += 2;
            g_pImgBuf[j] = color;
        }

        data.clear();
    }


    if (g_pImgBuf) { free(g_pImgBuf); g_pImgBuf = NULL; }


    _endthreadex(0);
    return 0;

}


int main()
{

    dataRead = true;

    HANDLE r_hThread = NULL;
    unsigned  r_threadID;
    r_hThread = (HANDLE)_beginthreadex(NULL, 0, Read, NULL, 0, &r_threadID);

    HANDLE w_hThread = NULL;
    unsigned  w_threadID;
    w_hThread = (HANDLE)_beginthreadex(NULL, 0, Write, NULL, 0, &w_threadID);

   


    while (true)
    {
        Sleep(100);
    }

}

发生以下错误向量下标超出范围1501错误

在线程函数的中间,让它休眠(2),它有时会工作,但很快我就会得到一个错误。

如果向量是问题所在,是否有其他方法可以将数组存储在队列中?

我不知道问题出在哪里

有什么好办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 13:16:06

你不能以如此简单的方式来做这件事。如果您希望一个线程从队列中提取另一个线程正在写入的消息,则需要mtuexes和条件变量。这不是一项微不足道的任务。我建议你多用谷歌搜索。我也会寻找并更新这里,如果我找到一个好的链接

https://juanchopanzacpp.wordpress.com/2013/02/26/concurrent-queue-c11/

https://gist.github.com/ictlyh/f8473ad0cb1008c6b32c41f3dea98ef5

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

https://stackoverflow.com/questions/63480110

复制
相关文章

相似问题

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