小编con*_*ych的帖子

使用boost线程和非静态类函数

所以我做了一些研究,发现你可以创建一个boost :: thread对象,并使用"this"和boost :: bind等从非静态类函数开始.它真的没有多大意义对我和我能找到的所有例子都有boost :: thread对象在与它开始的函数相同的类中启动,因此可以使用它.然而,我在另一个类中启动线程所以我害怕使用"this",我会说"this"来自我创建线程的类,而不是函数所在的类(我可能错了,我需要更多地了解这个"这个"家伙.以下是我遇到问题的一个例子.

ANNGUI.h

class ANNGUI
{
private:
    boost::thread *GUIThread;
    Main *GUIMain;
public:
    // Creates the entire GUI and all sub-parts.
    int CreateGUI();
}

ANNGUI.cpp

int ANNGUI::CreateGUI()
{
        GUIMain = new Main();
    GUIThread = new boost::thread(GUIMain->MainThreadFunc);
};

这不是全部来源,但我认为我的问题就在这里,我知道我必须以某种方式处理"这个",但我不确定如何.我可以使用静态函数,但我真的不想让变量变为静态.谢谢.

此外,是否有任何非常好的资源使用任何增强库?他们的网站文档似乎很好,但在我的头上.

c++ static multithreading boost function

44
推荐指数
2
解决办法
6万
查看次数

wWinmain,Unicode和Mingw

我正在学习Windows API,并使用mingw作为我的编译器,Code :: Blocks作为我的IDE.我遇到了使用wWinMain函数的问题.我使用了这里的程序链接文本.它在VSC++ 2008 express上编译得很好但是在使用mingw时我得到了"未定义的WinMain @ 16引用"错误.我已经弄清楚问题是什么(我认为).通过仅使用Winmain替​​换wWinMain,使用LPSTR替换字符串指针PWSTR,它可以完美地编译.我的问题是,我该如何解决这个问题,如果没有,那就不是使用Unicode了.

谢谢.

c++ mingw

14
推荐指数
2
解决办法
1万
查看次数

使用Visual Studio for IDE但使用CMake进行跨平台配置

我发现了许多与我要提出的问题类似的问题,但它们似乎没有帮助我理解如何做我想做的事情,假设它甚至可行.

我非常喜欢Visual Studio,我想将它用作C++项目的开发环境,但我也希望能够在我的双启动Linux系统上构建我的任何项目.我还希望能够将我的标头和源文件组织到共享驱动器上的特定目录结构中.我想使用CMake配置一个项目,使用Make on Linux或VS在Windows上构建它.

因此,可以在Visual Studio 2012 Pro中维护一个项目,以便利用其IntelliSense和编译来快速编写代码并对其进行编译,然后轻松地将源文件作为CMake配置放在不同的目录中(我想我仍然需要维护我的CMake .txt文件,无论如何)?

每次添加或修改代码,然后更新我的CMake .txt文件,我都可以做一些事情,比如将我的源码从项目目录复制到我的CMake文件夹,但这似乎很耗时.

编辑:我知道有一个转换器将解决方案转换为CMake文件.这是我最好的选择吗?如果是这样,它是否运作良好?

c++ cmake visual-studio

12
推荐指数
1
解决办法
7771
查看次数

代码块,MinGW,Boost和静态链接问题

我正在使用MinGW的代码块,我正在尝试使用静态链接编译一个简单的程序.我已经使用这些方向构建了Boost库.一切都很好,我能够成功编译这个简单的程序(它编译,我知道它不起作用,因为它在消息发送到控制台之前退出,但我只是想让它编译).

如果我的链接器库中有一个DLL,它编译得很好,但当我用相同内容的静态.a库切换它时,我得到未定义的引用,例如"未定义引用`_imp ___ ZN5boost6threadD1Ev'|".

我不知道问题是什么,也无法找到解决方案.我认为这可能与链接器设置有关,但我找不到有关如何更改它们的信息.我将非常感谢可以提供的任何帮助.

#include <iostream>
#include <boost/thread.hpp>

void myfunction()
{
    std::cout << "this is a thread" << std::endl;
    return;
}

int main()
{
    boost::thread mythread(&myfunction);
    return 0;

}
Run Code Online (Sandbox Code Playgroud)

c++ static boost mingw codeblocks

11
推荐指数
1
解决办法
5189
查看次数

使用遗传算法进行神经网络

目前我正在开发一个使用遗传算法优化神经网络的项目.我确实意识到这可能不是优化它们的最佳方式,但我是两个新手,所以我只是想尝试使用它们.

我的计划如下(可能会有很多变化).我的输入神经元将使用一个几乎可以有任何正数的数据集(包括最多两个位数的小数,所以它们实际上是浮点数),但最有可能在0到20000之间.因为重要性在于如何数字相互比较而不是它们有多大,它们首先除以输入的所有数值的最大数.在进入隐藏层之前,他们将乘以权重(任何正或负浮点数).隐藏层中的每个神经元将对它们的所有输入求和,直到它们被计算完为止.然后他们将通过物流功能运行并输出.

我的环境是Visual Studio C++ 2010 Express,我正在使用clr.

我的问题在于遗传算法及其如何工作.它将调整权重.我的问题是当它随机改变其中一个权重(突变率)时,它可能使权重异常高或低,当乘以输入并与其他人相加时会导致溢出或其他错误.我也不知道如何组织我的染色体.那么,通过选择权重而不是随机的位进行随机化并将它们更改为定义范围内的随机数会更好吗?基本上我正在寻找关于如何组织这个的建议,而不会在保持性能的同时使值过大或过小时导致错误.

谢谢,(对不起,如果这应该是理论计算机科学,但我认为它不适合那里)

c++ clr neural-network genetic-algorithm

9
推荐指数
1
解决办法
2155
查看次数

在C++中使用按位运算符将4个字符更改为int

我必须做的是以二进制模式打开一个文件,其中包含要被解释为整数的存储数据.我见过其他例子,例如Stackoverflow - 从char*数组中读取"整数"大小的字节.但我想尝试采取不同的方法(我可能只是顽固,或愚蠢:/).我首先在十六进制编辑器中创建了一个简单的二进制文件,内容如下.

00 00 00 47 00 00 00 17 00 00 00 41
如果12个字节被分成3个整数,则该(应该)等于71,23和65.

在二进制模式下打开此文件并将4个字节读入字符数组后,如何使用按位运算使char [0]位成为int的前8位,依此类推,直到每个字符串的位为int.

 
My integer = 00        00        00        00  
 +           ^         ^         ^         ^
Chars      Char[0]  Char[1]   Char[2]   Char[3]
             00        00        00        47


So my integer(hex) = 00 00 00 47 = numerical value of 71
Run Code Online (Sandbox Code Playgroud)

另外,我不知道我的系统的字节顺序是如何发挥作用的,所以有什么我需要记住的吗?

这是我到目前为止的代码片段,我只是不知道接下来要采取的步骤.


std::fstream myfile;
    myfile.open("C:\\Users\\Jacob\\Desktop\\hextest.txt", std::ios::in | std::ios::out | std::ios::binary);
    if(myfile.is_open() == false)
    {
        std::cout << "Error" << std::endl;
    }
    char* mychar;
    std::cout << myfile.is_open() << …
Run Code Online (Sandbox Code Playgroud)

c++ int bit-manipulation char

5
推荐指数
1
解决办法
2万
查看次数

从以编程方式在Android中创建的父视图中查找子视图

对于Android应用程序,我正在使用GridView并扩展BaseAdapter来组织其内容。对于在扩展BaseAdapter类中重写的功能getView,我创建了LinearLayout,将其附加一个ImageView和3个TextViews。现在,我需要实现convertView,但是由于我以编程方式创建了视图,所以我认为我无法使用findViewById查找这些子视图来更改其属性(例如文本和位图)。

我有一个想法,即在创建视图时为每个视图分配与不同类型的视图相关的唯一ID(例如:给我的name textview ID为1,description textview ID为2,依此类推),但是我不确定是否这些ID必须在每个视图中都是唯一的,无论它们是否是同一视图。

最终,如何找到全部以编程方式创建的属于线性布局视图的子视图?

android view

4
推荐指数
1
解决办法
6479
查看次数

使用C++进行静态控制背景颜色

我正在使用Windows API创建一个基本的GUI,我遇到了一个问题.它以一个主窗口开始,该窗口以我设置的自定义背景颜色打开(RGB(230,230,230)).然后它使用静态控件在左上角显示文本.

settingstext = CreateWindow("STATIC",
                             "SETTINGS",
                             SS_LEFT | WS_CHILD,
                             12,
                             20,
                             100,
                             20,
                             hwnd,
                             NULL,
                             proginstance,
                             NULL);
ShowWindow(settingstext, 1);
Run Code Online (Sandbox Code Playgroud)

这是有效的,但是当显示文本时,我需要一种方法来改变它的背景以匹配主窗口,否则它看起来就像它没有混合在一起.

我的问题是,我该怎么做?我目前使用下面的方法,它的工作原理,但我想知道,有没有办法永久设置背景颜色,CreateWindow在静态控件的功能之后,而不改变系统颜色,只是让它适用于那一个控件而不是任何发送WM_CTLCOLORSTATIC消息的东西.我已经尝试使用消息循环之外的GetDC函数和SetBkColor函数,但没有任何作用.

    case WM_CTLCOLORSTATIC:
    {
    HDC hdcStatic = (HDC) wParam;
    SetTextColor(hdcStatic, RGB(0,0,0));
    SetBkColor(hdcStatic, RGB(230,230,230));
    return (INT_PTR)CreateSolidBrush(RGB(230,230,230));
    }
Run Code Online (Sandbox Code Playgroud)

我想这样做是因为......

  • 我不想用每次窗口重新绘制时需要调用的函数来填充我的消息循环.
  • 更改仅适用于此静态控件.

我非常感谢能提供的任何帮助,至少指出我正确的方向,谢谢.

c++ winapi controls static background-color

3
推荐指数
1
解决办法
3万
查看次数

MSVC 2010链接器错误2005与静态库中的std :: cout

我找到了其他人遇到这个问题的例子,但他们的解决方案没有运气.我试图在一个也使用boost线程和绑定的静态库中使用std :: cout.当我不使用std::cout它并编译并与主程序良好链接,但当我这样做,我编译库我没有问题,但当我编译和链接使用静态库的主程序时,我得到了很多像:

2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRTD.lib(cinitexe.obj)
2>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTD.lib(MSVCR100D.dll)
2>LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup already defined in MSVCRTD.lib(crtexe.obj)

等等...

我已尝试进入我的链接器设置并停止使用错误输出中列出的冲突库,但我无法正确使用它.如果我告诉它停止使用一个库它可以解决问题,但给我一些遗漏的外部符号,然后我切换它有问题的库但我仍然得到一些"已经定义".有什么线索可以解决这个问题吗?我应该只创建另一个名为"log"或类别的类,只需从主.exe访问它(这将使用字符串库,这可能会再次引起问题,但我还没有尝试过)?感谢您的任何帮助.

c++ linker-errors lnk2005 visual-c++

3
推荐指数
1
解决办法
4616
查看次数

无法构建Boost 64位动态库,只能构建静态

我最近通过Dreamspark获得了Visual Studio 2010,所以我现在可以编译64位应用程序和库.然后我用Bjam使用以下行编译Boost 1.47库以进行输入.

.\b2 -a -d 0 -q -j 4 -d 0 --variant=debug,release --link=shared,static --threading=multi --address-model=32 --toolset=msvc-10.0
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到每个库中的4个(静态调试,动态调试,静态释放,动态释放).编译完成后,我将它们移动到另一个名为win32libs的目录中.然后,我使用完全相同的行来编译64位版本,但是将地址模型切换为64(我知道它们几乎完全相同,因为我从我制作的相同文本文档中复制和过去,以便编译它们很容易).当我在64位编译后进入我的stage目录时,我只看到.lib,没有.dll.这是我正在做什么的问题,或者在某种程度上,不支持64位dll?

谢谢

c++ static boost dynamic

3
推荐指数
1
解决办法
6513
查看次数

在 Python 多处理中共享文件描述符

我正在尝试使用Python的多处理模块来生成一个服务器来接收UDP消息,稍微修改它们,然后将它们传递给以subprocess模块​​启动的grep进程。由于 Popen 子进程的标准输入接受文件描述符,这就是我想要传递的内容。

我遇到的问题是获取一个与服务器进程通信的文件描述符,我可以将其传递给 grep 子进程。我过去曾使用普通的 os.fork() 和 os.pipe() 完成此操作,但现在我想使用带有 spawn start 方法的多重处理。我尝试从 os.pipe 获取写入描述符,使其可继承,并通过 multiprocess.Process 将其作为参数传递给新进程。当我尝试使用 os.fdopen(fd, 'wb') 在另一个进程中打开它时,我收到错误文件描述符的 OSError 。这是我测试过的代码片段。

def _listen_syslog(ip_address, 端口, write_pipe):
    f = os.fdopen(write_pipe, 'wb')
    #做一些事情,比如写入文件



def Listen_syslog(ip_address, 端口):
    r, w = os.pipe()
    os.set_inheritable(w, True)
    proc = mp.Process(target=_listen_syslog, args=(ip_address, port, w))
    proc.start()
    #这个进程不需要写,所以关闭它
    os.close(w)
    #这是我想传递给 grep 子进程 stdin 的描述符
    #在使用 os.fork() 之前,类似的情况已经发生过
    返回r

最后,如果无法使用通过 os.pipe() 创建的管道来执行此操作,我可以使用 multiprocessing.Pipe() 并使用连接对象 fileno() 函数中的文件描述符直接使用吗?更重要的是,只要我不将连接对象用于其他任何用途,这样做就安全吗?

multiprocessing python-3.x python-multiprocessing

3
推荐指数
1
解决办法
4690
查看次数

主线程等待提升线程完成任务(但没有完成)

我发现很多东西让一个线程等待另一个线程在继续之前完成执行,但这不是我想要做的.我对使用任何多线程api不是很熟悉,但现在我正在努力学习提升.我的情况是我使用我的主线程(来自int main()的起始线程)来创建一个负责与主GUI交互的类的实例.然后调用类函数创建一个boost线程,该线程又创建GUI并运行消息泵.我想要做的是当我的主线程调用类成员函数来创建GUI时,我不希望该函数返回,直到我从新创建的线程告诉它.这样我的主线程无法继续并从与GUI线程交互的GUI类调用更多函数,直到该线程完成GUI创建并进入消息循环.我想我可以弄清楚它是否是多个boost线程对象相互交互,但是当它是与boost线程对象交互的主线程(非boost对象)时,我迷路了.最后我想在我的主线程中调用一个类函数(以及其他任务)来检查用户是否输入了GUI的任何新输入(将消息循环检测到的任何更改更新到结构中并更改bool告诉类函数中的主线程发生了变化).任何建议都将非常感谢.

这是主线程调用的成员函数.

int ANNGUI::CreateGUI()
{
    GUIMain = new Main();
    GUIThread = new boost::thread(boost::bind(&Main::MainThreadFunc, GUIMain));
    return 0;
};

这是提升线程启动功能.

void Main::MainThreadFunc()
{
    ANNVariables = new GUIVariables;
    WndProc = new WindowProcedure;
    ANNWindowsClass = new WindowsClass(ANNVariables, WndProc);
    ANNWindow = new MainWindow(ANNVariables);
    GUIMessagePump = new MessagePump;
    ANNWindow->ShowWindows();
    while(true)
    {
        GUIMessagePump->ProcessMessage();
    }
};

顺便说一句,一切都编译好,当我运行它,它工作我只是在主线程中放入一个sleep()所以我可以玩一点GU​​I.

c++ multithreading boost

2
推荐指数
1
解决办法
7643
查看次数

Android"文件夹无法重命名或移动"(修复已尝试,但未成功)

这就是我的故事.首先,我在他选择的默认目录中安装了Android SDK,这是程序文件(x86)(我认为默认应该是应用程序数据?!)在成功拉动API后我很快意识到我犯了错误,由于名称中有空格,因此我将其卸载并重新安装在我的D驱动器下的一个名为development的文件夹下.

一切都很好,但是当我试图拉动SDK时,我收到了"一个文件夹无法重命名或移动"的消息.然后我尝试禁用我的防病毒软件(稍后会详细介绍),关闭所有其他窗口,甚至结束Windows资源管理器,但没有任何改变.

为了禁用我的防病毒软件,我使用它的控制面板(Avast BTW)来关闭防护罩.我真正想要做的就是结束这个过程,但是,这里很重要,但拒绝访问!我甚至将taskmgr.exe作为管理员运行,但没有成功.谁能解释为什么会这样?无论如何,在厌倦了所有这些之后,我刚刚用网络启动到安全模式,现在一切都很好,但我真的很讨厌每次需要更新SDK时这样做,所以任何关于如何解决这个问题的建议都会是一个很好的帮助,特别是如何结束我的防病毒过程,所以我可以看到这是否是问题.

编辑:我还从安装它的文件夹中以管理员身份运行Android SDK管理器时完成了所有操作.

sdk android

0
推荐指数
1
解决办法
4620
查看次数