我正在使用pthreads-win32来允许对windows进行线程支持.
我有一个使用pthreads的跨平台项目,我想让它在各种编译器和不同操作系统版本的Windows上工作.
至少,根据文档,pthreads-win32应该与MSVC一起工作,甚至提供MSVC构建.
但我不知道该库是否使用最新的MSVC编译器(如MSVC-2008)进行测试,以及是否支持64位窗口.
根据您自己的经验,您是否了解此库存在的任何问题?
笔记:
我只需要了解pthreads-win32的局限性.
我正在使用PHP 的pthreads扩展.当我从执行PHP脚本cmd在Windows上,我得到的并行线程,但是当我调用同一个脚本的Apache,我得到不同的结果,似乎对我来说,单个线程执行.
是否有任何配置我应该让Apache获得响应cmd(并行)?
class AsyncOperation extends Thread {
public function __construct($arg){
$this->arg = $arg;
}
public function run(){
if($this->arg){
for($i = 0; $i < 50; $i++) {
echo "Yoo " . $this->arg . "<br>\n";
}
}
}
}
$thread = new AsyncOperation("World ----------");
$thread2 = new AsyncOperation("Second -------------------------");
$thread->start();
$thread2->start();
for($i = 0; $i < 100; $i++) {
echo "Standard <br>\n";
}
$thread->join();
$thread2->join();
Run Code Online (Sandbox Code Playgroud)
示例代码给出响应,cmd如:
Yoo World ----------<br>
Yoo World ----------<br>
Yoo …Run Code Online (Sandbox Code Playgroud) 我想将“pthreads for Win32”与我的应用程序静态链接,用 MinGW32 编译,这样应用程序就不需要 pthreadGC2.dll 来运行。
我正在使用最新版本的 pthreads - 2.9.1,从这里下载,lib 和包含文件被复制到 MinGW lib 和包含目录。
在网上搜索如何做到这一点时,我偶然发现了这个线程,该线程指示使用 -static-libgcc -static-libstdc++ 标志。这不起作用,这意味着应用程序可以编译,但在没有 pthreadGC2.dll 的情况下无法运行。
他们还建议使用 -static -static-libgcc -static-libstdc++。这不会编译并出现以下错误:
main.o:main.cpp:(.text+0x461): undefined reference to `_imp__pthread_create'
main.o:main.cpp:(.text+0x4be): undefined reference to `_imp__pthread_join'
Run Code Online (Sandbox Code Playgroud)
有谁知道怎么做?
顺便说一句 - 将 pthreadGC2.dll 从 2.9.1 版本(在 pthreads-w32-2.9.1-1-mingw32-dll.tar.lzma 内)下载到应用程序的文件夹是不够的。要运行该应用程序,我还应该复制另一个 dll:libgcc_s_dw2-1.dll。这对我来说真的很糟糕 - 我不想让我的用户每次想要运行我的应用程序时都拥有这 2 个 DLL
这是我的代码:
#include <stdio.h>
#include <pthread.h>
static void* threadMain(void* param)
{
printf("thread start\n");
for (int i = 0; i < 2; i++)
Sleep(1);
printf("thread …Run Code Online (Sandbox Code Playgroud) 我在 PHP 中遇到 pthreads 问题。
当我启动 apache 时,我看到这样的错误:
php.exe - Entry point not found
The procedure entry point was not found _zend_hash_update@@12 in library D:\xampp\php\ext\php_pthreads.dll
Run Code Online (Sandbox Code Playgroud)
当我在 CMD 中执行脚本时,出现警告:
PHP Warning: PHP Startup: Unable to load dynamic library 'php_pthreads.dll' (tried: D:\xampp\php\ext\php_pthreads.dll
Run Code Online (Sandbox Code Playgroud)
我将 pthreadVC2.dll 复制到:
C:/windows/system32
D:/xampp/php
D:/xampp/apache/bin
Run Code Online (Sandbox Code Playgroud)
我将最后一个文件 php_pthreads.dll 复制到:
D:/xampp/ext
Run Code Online (Sandbox Code Playgroud)
我添加到 php.ini 行:
extension=php_pthreads.dll
Run Code Online (Sandbox Code Playgroud)
我的配置:
我在 php …
我的env是Windows8.1(64位)并使用Visual Studio 2010.
我确实将所有*.dll文件放在system32,SYSWOW64中(因为我使用win8 64bit.)
并使用VC 2010链接x64-system的*.lib文件的位置.
当然,我添加了额外的文件夹lib forders ..,包括文件夹..等..
但是当我尝试编译"pthread-used"项目时,会发生致命错误.
-资源
#include<pthread.h>
#include<stdio.h>
int doit_id,trd_id;
pthread_t trd;
void *doit(void *data){
doit_id = (int)data;
return 0;
}
int main(){
trd_id=pthread_create(&trd,NULL,doit,0);
return (0);
}
Run Code Online (Sandbox Code Playgroud)
-错误
1.obj : error LNK2019: unresolved external symbol __imp__pthread_create (referenced in function _main)
C:\Users\~program Location~ : fatal error LNK1120: 1 unresolved externals
Run Code Online (Sandbox Code Playgroud)
请帮我