我有个疑问。假设我有一个使用 malloc 分配的缓冲区,如下所示:
uint16_t buffer_length = 200; // !size is dynamic!, never static
uint8_t* buffer = (uint8_t*) malloc(200*sizeof(uint8_t));
// buffer then is populated somehow from 0 to 199
Run Code Online (Sandbox Code Playgroud)
现在我有一个 std::queue ,我需要 FIFO 几个分配的缓冲区,如下所示:
std::vector<uint8_t> buffer_vector(buffer, buffer + buffer_length);
std::queue<std::vector<uint8_t>> fifo_queue;
fifo_queue.push(buffer_vector);
Run Code Online (Sandbox Code Playgroud)
考虑到我决定从 uint8_t* 转移到 std::vector 因为我可以在单个元素中存储更多缓冲区信息(长度)。现在我想从队列中取出项目:
std::vector<uint8_t> taken_item = fifo_queue.front(); // reads the FIFO item
fifo_queue.pop(); // removes from FIFO
uint8_t* taken_item_buffer_ptr = taken_item.data(); // takes the buffer ptr
uint16_t taken_item_buffer_length = taken_item.capacity(); // takes the size
Run Code Online (Sandbox Code Playgroud)
现在我可以处理从 FIFO 返回的缓冲区,问题是,我是否必须释放返回的指针?例如如下: …
我收到一个错误,我不知道如何修复,所以我想知道是否可以获得一些帮助。
我的功能:
dispatch(new \App\Jobs\createSqlJob($databaseName, $data['company_name']));
Run Code Online (Sandbox Code Playgroud)
这是错误:
| 2022-12-13 21:36:38 | Exception: Job is incomplete class: {"__PHP_Incomplete_Class_Name":"App\\Jobs\\createSqlJob","99992","99992"} in /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php:116
Stack trace:
#0 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(69): Illuminate\Queue\CallQueuedHandler->dispatchThroughMiddleware()
#1 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate\Queue\CallQueuedHandler->call()
#2 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(428): Illuminate\Queue\Jobs\Job->fire()
#3 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(378): Illuminate\Queue\Worker->process()
#4 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(172): Illuminate\Queue\Worker->runJob()
#5 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(130): Illuminate\Queue\Worker->daemon()
#6 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(114): Illuminate\Queue\Console\WorkCommand->runWorker()
#7 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(36): Illuminate\Queue\Console\WorkCommand->handle()
#8 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Container/Util.php(41): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#9 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(93): Illuminate\Container\Util::unwrapIfClosure()
#10 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(37): Illuminate\Container\BoundMethod::callBoundMethod()
#11 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Container/Container.php(651): Illuminate\Container\BoundMethod::call()
#12 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Console/Command.php(136): Illuminate\Container\Container->call()
#13 /var/www/NTTJob/vendor/symfony/console/Command/Command.php(308): Illuminate\Console\Command->execute()
#14 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\Component\Console\Command\Command->run()
#15 /var/www/NTTJob/vendor/symfony/console/Application.php(1002): Illuminate\Console\Command->run()
#16 /var/www/NTTJob/vendor/symfony/console/Application.php(299): Symfony\Component\Console\Application->doRunCommand()
#17 /var/www/NTTJob/vendor/symfony/console/Application.php(171): Symfony\Component\Console\Application->doRun()
#18 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Console/Application.php(102): Symfony\Component\Console\Application->run()
#19 /var/www/NTTJob/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\Console\Application->run() …Run Code Online (Sandbox Code Playgroud) 我试图使程序的目标是将元素添加到队列(在线程中)并显示有关队列的数据(您可以在主窗口中看到要显示的数据)。在此之前,我想从队列中删除一个元素(每两秒)并添加新元素(每一秒)。
#include <iostream>
#include <queue>
#include <thread>
#include <Windows.h>
using std::queue;
using std::cout;
void loadQueue(queue<int> &toLoad)
{
for(int i = 0; i < 100; i++)
{
toLoad.push(i);
Sleep(1000);
}
}
int main(void)
{
queue<int>toLoad;
std::thread(loadQueue, std::ref(toLoad));
while(true)
{
cout << "SIZE OF QUEUE : " << toLoad.size() << '\n' << '\n';
cout <<"FRONT :" << toLoad.front() << '\n' << '\n';
cout <<"BACK : " << toLoad.back() << '\n';
toLoad.pop();
Sleep(2000);
}
}
Run Code Online (Sandbox Code Playgroud)
当我启动程序时,我什么也看不到。程序立即关闭。Visual Studio 向我显示此消息:
我正在尝试将以下JS代码翻译成ObjC; 它基本上定义了一个函数并将其存储在一个数组中以便以后执行:
var logic = function() {
me.removeNode(node);
}
this.queue.push(logic);
Run Code Online (Sandbox Code Playgroud)
我的ObjC端口包含方法:-(void)removeNode:(AbstractNode*)node我被卡住了...我想使用指定的"node"参数对此方法进行排队调用...
编辑:我正在阅读选择器.它仍然很模糊,但可能有所帮助.不知何故.或不?
它甚至可能,还是我需要找到一个解决方法:-)?谢谢!
解决这个问题归功于社区:
// Queue declaration
NSMutableArray *IRQ = [[NSMutableArray array] retain];
// Add logic to the queue for delayed execution:
[IRQ addObject:^{ NSLog(@"thanks for the help!"); } ];
// Call later
for (int i = 0; i < [IRQ count]; i++){
void (^delayedCall)(void) = [IRQ objectAtIndex:i];
delayedCall();
}
Run Code Online (Sandbox Code Playgroud) public class PriorityQueue<T> : IPriorityQueue<T>
where T : IComparable
Run Code Online (Sandbox Code Playgroud)
所以,我已经使用上面的Header创建了一个优先级队列类,我试图将它与另一个类一起使用.
private static PriorityQueue<Order> PQ;
Run Code Online (Sandbox Code Playgroud)
看起来这应该完全正常,但我收到了这个错误.
我
namespace.Order不能T在泛型方法中用作类型参数namespace.PriorityQueue<T>.有没有隐式转换从namespace.Order到System.IComparable
我无法辨别出这是告诉我要做什么的.这是否意味着我的IComparable实现不足以达到此目的,还是我正在使用某种错误的语法?
我一直在尝试编写一个使用Node文件的队列,我似乎无法弄清楚空指针异常的问题.我在网上看了一下,但我对Java太新了,我想要理解我在这里寻找的东西.任何人都可以找到它或者至少引导我朝着正确的方向前进吗?
首先是队列:
public class Queue extends CharNode {
public CharNode head;
public CharNode tail;
public Queue(){
this.head = null;
this.tail = null;}
public boolean isEmpty(){
return (head==null);}
public void enqueue(Character character){
if (isEmpty()){
head.character = character;
head.nextNode = tail;}
else {
CharNode oldTail = tail;
tail = new CharNode();
oldTail.character = character;
oldTail.nextNode = tail;
}
}
public Character dequeue(){
if (isEmpty()) throw new RuntimeException("Queue Empty");
head.character = character;
head = head.nextNode;
return character;
}
public static void main(String[] args){ …Run Code Online (Sandbox Code Playgroud) 将队列中的每个项目乘以-1(queue.ForEach似乎不存在)的优雅(简短)方法是什么?读取整个队列并将其写入另一个队列似乎过多.有没有办法在现场进行?
根据MSDN:
Monitor 类由静态(在 C# 中)或共享(在 Visual Basic 中)方法组成,这些方法对控制对关键部分的访问的对象进行操作。为每个同步对象维护以下信息:
对当前持有锁的线程的引用。
对就绪队列的引用,其中包含准备获取锁的线程。
对等待队列的引用,其中包含正在等待锁定对象状态更改通知的线程。
在这个线程中,两个队列引起了一些微妙的问题。
我认为上述线程中问题的根本原因是有 2 个队列。如果只有一个队列,则无论何时Monitor.Pulse(),都只能调度该队列中的一个线程来运行。没有办法让多个线程同时处于就绪状态。所以这个问题永远不应该发生。
那么为什么a要Monitor保留2个队列呢?
这段代码:
Deque<String> list = new LinkedList<>();
list.push("first");
list.push("second");
list.push("third");
System.out.println(list.remove());
Run Code Online (Sandbox Code Playgroud)
相当于:
Deque<String> list = new LinkedList<>();
list.push("first");
list.push("second");
list.push("third");
System.out.println(list.pop());
Run Code Online (Sandbox Code Playgroud)
pop() 和remove() 都删除第一个元素(head)。那么,采用两种不同方法的原因是什么?
这是一个使用的FIFO程序linked list.该程序没有提供所需的输出,但会生成一个长循环,该循环在某个时间后停止并且有一条消息表明程序已停止工作.问题是什么 ?
#include <iostream>
using namespace std;
struct node {
int data;
struct node* previous; // This pointer keeps track of the address of the previous node
};
struct queue {
node* first;
node* last;
};
node* dataNode_P_A;
bool loop = true;
struct node* enterData();
struct node* enter_N_Data();
void displayQueue();
int main() {
struct node* dataNode= enterData();
while( loop ) {
cout << "Want to enqueue ? Press y/n : ";
char ans;
cin >> ans;
if( …Run Code Online (Sandbox Code Playgroud) queue ×10
c# ×3
c++ ×3
fifo ×2
java ×2
collections ×1
deque ×1
exception ×1
free ×1
function ×1
generics ×1
jobs ×1
laravel ×1
linked-list ×1
malloc ×1
null ×1
objective-c ×1
pointers ×1
visual-c++ ×1