我实际上不知道我是否在问一个正确的问题。 让我先描述一下我的问题。 最终用户 Web服务器(通过PHP)内部进程(通过C或C ++)外部硬件 1应该像ajax请求。 2应该是进程间通信。 3应该是uart RS232通信。 最终用户将请求更改硬件上的某些设置,然后请求将传播到硬件。 硬件回复成功或失败,然后结果将传播回用户。 硬件回复延迟可以在1秒内。 因此,当Web服务器收到来自最终用户的ajax请求时,它将保存并向c / c ++程序发送IPC请求。 c / c ++程序将通过UART发送并保持并等待硬件回复。 对于UART部分,有异步uart模型,因此c / c ++程序不需要持续等待UART。 Web服务器将等待c / c ++程序返回(再次通过IPC),然后将结果转发回最终用户。 由于webserver没有内存,所以不能有任何异步的东西(据我所知)。 我可以想到一个通过文件或数据库的简单方法。 Web服务器不断读取文件或数据库以进行回复。 但我真的不认为这是一个好方法,因为它会导致服务器CPU周期的浪费。 如果我可以容忍一些延迟,那么这取决于,但我认为用户端的几秒延迟对他们来说是好的。 你能给我一些很好的IPC方法来实现我的目的吗? 而且,如果您认为整个过程或任何特定链接(包括链接1,2和3)有更好的解决方案(比我上面的描述),请同时分享您的2cent。 希望我能清楚地问我的问题。 谢谢。
我只想知道当前编程语言中是否有任何方法可以动态生成像数组这样的变量名称,例如。 for(i=1;i<10;i++) { int a i = ; printf(“the value generated in the logic is %d”,a i); } 我知道有一个类似的方式的数组的概念,但我只是想知道这是否存在于任何编程语言中。 提前致谢….
请帮我计算介于0到100000000之间的素数因为我用来写但它的工作速度很慢: 这是我的代码: $n =100000000; $answer =0; for ($i = 2, $j = 2; $i <= $n; $i++) { for ($j = 2; $j < $i; $j++) { if ($i % $j == 0) { break; } } if ($j == $i) { $answer++; } } echo $answer . PHP_EOL;
我正在使用SWIG生成一个调用’c’共享库的PHP扩展。 除了下面的情况,我能够让大多数事情发挥作用…… 在我的’c’代码中,我声明了一个函数(请注意结构和函数名称已被更改以保护无辜者): int getAllThePortInfo(EthernetPort *ports); 在这种情况下,参数端口实际上是EthernetPort结构的数组。 在另一个’c’程序中,我可以这样称呼它…… EthernetPort ports[4]; int rval = getAllThePortInfo(ports); 这很好用。 然后我运行SWIG,生成我的共享库,并且所有构建都很好。 我得到的PHP代码我可以调用… $ports = new_ethernetport(); $rval = getAllThePortInfo($ports); 这会导致PHP抛出以下错误: php:free():无效指针:0x099cb610 所以,我试着做一些像…… $ports = array(new_ethernetport(), new_ethernetport(), new_ethernetport(), new_ethernetport()); $rval = getAllThePortInfo($ports); 但后来PHP抱怨… PHP致命错误:在getAllThePortInfo的参数1中输入错误。 预计SWIGTYPE_p_EthernetPort 我认为正在发生的是PHP(和SWIG)没有区分指针和数组,而在包装器中,它正在考虑“指向单个结构的指针”,实际上,它是一个结构数组。 PHP中有什么我可以做的吗? 分配一块内存,我可以用作存储多个结构的空间? SWIG我能做些什么来让我的包装更好地理解我的意图吗? 我真的很感激任何建议。 谢谢。
这是我的php内容 array(“pipe”, “w”), 1 => array(“pipe”, “w”), 2 => array(“file”, “tmp/error-output.txt”, “a”) ); $current=$_POST[‘t1’]; $file=”hello.cpp”; file_put_contents($file,$current); putenv(“PATH=C:\Program Files (x86)\Dev-Cpp\MinGW64\bin”); $process = proc_open(‘g++ -Wall -o hello hello.cpp’, $descriptorspec, $pipes); if (is_resource($process)) { fwrite($pipes[0],”12″); fwrite($pipes[0],”/n”); fwrite($pipes[0],”12″); $answer=shell_exec(“hello.exe”); fclose($pipes[0]); $return_value = proc_close($process); } } ?> .txtarea{ width:300px; height:500px;} 这里是c程序接受来自proc_open()的输入 #include int main() { int a,b,c; scanf(“%d%d”,&a,&b); printf(“Addition = […]
就像在C中一样,我可以使用字符串作为数组吗? 例如 $a=”abcd”; for($b=0;$b<=3;$b++) {echo $a[$b];} 那么,PHP中的字符串是一个数组,还是基于C中的数组?
我有一个PHP脚本,需要几个小时(可能是几天)才能执行。 它非常简单但非常耗费CPU,大部分执行时间都花在了(我可以在分析脚本后告诉): $array = explode(‘,’, $a[$i]); 其中$a[$i]是一个非常长的字符串,表示由逗号分隔的30k元素的向量 foreach($array as $key => $value)循环; 对于每个循环,执行一些in_array()以及比较和赋值操作 $a实际上是一个非常大且稀疏的矩阵(30k * 30k),但我无法将其保留在内存中(8GB似乎没有足够的RAM)所以我只保留一个“稀疏表示”(基本上每行都是一个字符串)并且在我需要连续工作时使用explode() 。 我知道用C语言(或其他语言)重写所有内容会提高性能(多少?)但是,在这之前我想知道我是否可以做任何事情来改善PHP的执行时间。 编辑后回答。 我尝试了几个你的建议,这是我的报告: 1)str_getcsv在大多数情况下比爆炸慢 2)SPLFixedArray减少了存储矩阵所需的内存,但是对于30k x 30k的矩阵来说,8GB是不够的,所以我认为它不会有多大帮助; 这里真正的问题是我认为PHP中缺少矩阵的稀疏表示 3)我无法存储爆炸操作的所有结果,因为这仍然意味着将整个矩阵保留在内存中(没有足够的RAM) 4)我已经尝试过数据库方法,即使我确定它会慢一些:我存储了三元组(i,j,value)来表示每个矩阵元素; 甚至删除不太重要的值(我可以牺牲小于阈值的值并获得不太精确的结果,但仍然有用)并且只存储了1800万个元组,使用mysql myisam的方法比我在内存中的数组方法慢得多。 5)我尝试了使用MEMORY引擎(RAM中的mysql表)的数据库方法并存储除零值为零的所有矩阵元素; 这次有4200万条记录……它更快,不是一个数量级,但快2-4倍……我想我可以在5天而不是15-20完成工作……它仍然太多了(我想在24小时内完成),如果您有任何其他建议,欢迎您 编辑2:我解释了这个问题 我会提供一些关于这个问题的细节,我真的需要简化一切,否则解释起来会太长,但我认为这足以让他们更好地了解情况。 我有一个矩阵表示节点之间的距离; 整数中的距离也可以是无限的。 我有一个内存表,用三元组表示每个距离:node_1,node_2,distance(仅表示非无限距离)。 我有这种贪婪的算法,我没有写,我应该优化在具有8GB RAM的笔记本电脑上在可行的时间(比如说不到一天)执行它。 算法基本上进入输入两个节点,并根据必须在每个步骤validation的以下两个属性逐步设计起始节点和结束节点之间的路径: 必须在相对于当前节点更靠近结束节点的节点集中选择新的中间节点 在这些节点中,选择更接近当前节点的节点 请考虑1)不满足三角不等式。 2)这不是最短的路径问题 这是我调用的函数的一些伪代码,直到我足够接近结束节点: get_next_node($node_1, $node_2){ $dist = select distance from distances_table where node_2 = […]
在PHP中编写关联数组的语法时,我们执行以下操作 $a = array(‘foo’ => ‘bar’); 我很好奇=>语法的关系,或者可能是运算符。 这是否与ZE中哈希表中使用的某种引用有关,或者与C使用的某种后续右移或引用有关? 我想我只是想知道这个语法的真正根本目的,它是如何与用于处理数组的ZE和/或php扩展相关,它如何与编译前C的书面函数相关,或者如果我只是不知道是什么我在说:)
似乎没有一个?
在PHP扩展开发中有zend_call_method_with_0_params , zend_call_method_with_1_params和zend_call_method_with_2_params 。 但是如何调用超过2个参数的方法呢?