MQL中的异步和多线程编程 - 页 2 123456789...40 新评论 Roman 2019.07.24 17:42 #11 Koldun Zloy: 我将翻译MT开发公司的代表已经告诉你的内容。 你不能从MQL创建线程。即使使用WinAPI也不行。 你只能通过编写你自己的DLL来做到这一点。 WinAPI和使用标准的dll ! kernel32.dll user32.dll 等。 多线程工作的目的是用WinAPI函数,而不是用mql函数。 但不幸的是,你不能用mql函数进行多线程工作。 Igor Makanu 2019.07.24 18:46 #12 Roman: WinAPI并使用标准的dlls ! kernel32.dlluser32.dll 嗯,正好相反,WinAPI是作为动态库kernel32.dll , user32.dll实现的。 你从来没有尝试过用纯C++编写一个通常的Windows窗口,上面写着 "Hello Word!"的文字。- 网上有一些例子,写下你的第一个 "Hello Word!- 它自己就会清除;) Roman 2019.07.24 19:15 #13 Igor Makanu: 嗯,正好相反:WinAPI是作为动态库kernel32.dll , user32.dll实现的。 你从来没有尝试过用纯C++编写一个通常的Windows窗口,上面写着 "Hello Word!"的文字。- 网上有一些例子,写下你的第一个 "Hello Word!- 很多东西都会自己清楚起来的;) 标准是指标准的Windows dlls,标准并不意味着它们是静态的.lib。 伊戈尔,你走错路了...... "Hello Word!"与dll的初始化有什么关系,并在你的线程中调用它的函数 ! 比如说。 有一个WinAPI函数MessageBoxW()。 它必须在自己的线程中调用。 为此,你需要初始化dll本身和导出的函数,你能举例说明如何正确操作吗? LoadLibraryW("user32.dll"); GetProccAddress(hMyDll, "MessageBoxW"); FreeLibrary(hMyDll); и т.д. 然后在初始化之后,用CreateThread()调用MessageBoxW(); 。 函数执行完毕后,释放资源并关闭线程。 给我一个例子,如何在mql中正确操作? Yuriy Asaulenko 2019.07.24 19:23 #14 我目前正在研究一个多线程的系统。但不是在MCL中,而是在标准C++中。啊,有多少个耙子)。 Igor Makanu 2019.07.24 19:35 #15 Roman: 标准是指标准的Windows dll,标准并不意味着它们是静态的.lib。 伊戈尔,你走错方向了...... "Hello Word!"与dll的初始化有什么关系,并在你的线程中调用它的函数 ! 比如说。 有一个WinAPI函数MessageBoxW()。 它必须在自己的线程中调用。 为此,你需要初始化dll本身和导出的函数,你能举例说明如何正确操作吗? 然后在初始化之后,用CreateThread()调用MessageBoxW(); 。 执行完函数后,释放资源并关闭线程。 给我一个例子,如何在mql中正确操作? 你走错了路,有人告诉你--写一个dll(其中你必须分配内存并注册一个新线程!)。- 然后在退出时小心翼翼地销毁一切!)并从MQL中调用它。 在你的例子中,内存分配和进程注册在哪里? MessageBox的调用--这意味着MQL程序已经分配了它的资源,但还没有创建一个独立的线程。 我甚至不想检查它,但当MessageBox被调用时,终端应该冻结。 Roman 2019.07.24 19:48 #16 Igor Makanu: 你走错了路,我告诉过你--写一个dll并从MQL中调用它。 你调用MessageBox的事实--这只意味着MQL程序已经提供了它的资源,但没有创建一个独立的线程。 我甚至不想检查它,但当你调用MessageBox时,你的终端应该冻结。 Igor,我引用了初始化dll函数作为例子来理解我所说的。 但我不知道如何在mql中正确地做,纯C++会让人误解。 mql本身的特殊性可能会引起混淆。这就是为什么我在论坛上寻求帮助,而不是向谷歌求助。 为什么我需要写一个dll,因为WinAPI是建立在dll上的,可调用的函数已经在user32.dll 中了,例如?我创建这个主题是为了理解这个问题,如何在mql中正确地做,你告诉我内存分配 和进程注册在哪里))。 给我看一个适当的例子,如何在mql中做到这一点? 或者指导我去找一个好的指南。 Dmitry Fedoseev 2019.07.24 19:52 #17 Roman: Igor,我给出了dll的初始化函数作为例子来理解我的意思,但我不知道如何在mql中正确操作,纯C++可能会有误导。 mql本身的特殊性可能会引起混淆。这就是为什么我在论坛上寻求帮助,而不是向谷歌求助。 为什么我需要写一个dll,因为WinAPI是建立在dll上的,可调用的函数已经在user32.dll 中了,例如?我创建这个主题是为了了解在mql中如何正确地做这个问题,你告诉我内存分配 和进程注册在哪里))。 给我看一个适当的例子,如何在mql中做到这一点? 或者指导我去找一个好的指南。 你不能从mql程序中创建一个线程,即使使用WinAPI也不行。 Igor Makanu 2019.07.24 20:02 #18 Roman: Igor,我举了一个dll初始化函数的例子来理解我的意思,但如何在mql中正确地进行初始化,我不知道,纯C++可能会有误导。 mql本身的特殊性可能会引起混淆。这就是为什么我在论坛上寻求帮助,而不是向谷歌求助。 为什么我需要写一个dll,因为WinAPI是建立在dll上的,可调用的函数已经在user32.dll 中了,例如?我创建这个主题是为了理解这个问题,如何在mql中正确地做,你告诉我内存分配 和进程注册在哪里))。 给我看一个适当的例子,如何在mql中做到这一点? 或者指导我去找一个好的指南。 再一次,这不是通过MQL来完成的,你要从另一个方面解决问题--从尾部,而不是从头部!"。 你写一个dll - 从MQL中调用它,并将数据传给dll,如果你需要继续MQL程序(复杂的计算),你在dll中创建一个新的线程,并在这个线程中处理数据。 你可以阅读如何编写dll - 在论坛上搜索 "dll",你会发现大约20篇文章 没有教程,但你要用的资源是写一个dll,所以要寻找如何创建线程等方面的解决方案。 Roman 2019.07.24 20:03 #19 Dmitry Fedoseev: 你不能从一个mql程序中创建一个流程,即使使用WinAPI也不行。 关于交易、自动交易系统和策略测试的论坛 MQL中的异步和多线程编程 MetaQuotes软件公司。, 2019.07.24 16:31 你 不能从DLL中调用MQL函数。 但是可以通过DLL调用来运行多个线程,使它们在其环境中独立于MQL5工作。 例如,你从MQL中准备数据,将其放置在某处或传递给DLL,而DLL将在多个线程中执行任务,并通过附加函数返回结果。 调用Windows API函数是来自dll的调用,这意味着可以使用CreateThread();,为Windows API函数创建线程,CreateThread();被移植到标准mql库不是没有原因 的。 Igor Makanu 2019.07.24 20:12 #20 Roman: 对Windows API函数的调用是来自dll的调用,所以对于Windows API函数,可以使用CreateThread() 来创建线程;CreateThread();被移植到标准mql库是有原因的。 没有人移植任何东西,你在包里看到的只是函数签名。 要创建一个流程,你需要一个函数体--这就是将在流程中运行的函数体。 要在Windows中注册一个线程,你需要填入结构。 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, __drv_aliasesMem LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); 见lpStartAddress - 这是函数的入口点地址,将在线程中运行,不用担心内存分配 问题 要解决这个问题,你需要找到一个机会来获得MyFunc()的地址--在内存中,而它是不存在的--好吧,根本就不存在......没有! 我不知道该如何解释这个问题......。这并不存在 )))) 123456789...40 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我将翻译MT开发公司的代表已经告诉你的内容。
你不能从MQL创建线程。即使使用WinAPI也不行。
你只能通过编写你自己的DLL来做到这一点。
WinAPI和使用标准的dll !
kernel32.dll
user32.dll
等。
多线程工作的目的是用WinAPI函数,而不是用mql函数。
但不幸的是,你不能用mql函数进行多线程工作。
WinAPI并使用标准的dlls !
kernel32.dll
user32.dll
嗯,正好相反,WinAPI是作为动态库kernel32.dll , user32.dll实现的。
你从来没有尝试过用纯C++编写一个通常的Windows窗口,上面写着 "Hello Word!"的文字。- 网上有一些例子,写下你的第一个 "Hello Word!- 它自己就会清除;)
嗯,正好相反:WinAPI是作为动态库kernel32.dll , user32.dll实现的。
你从来没有尝试过用纯C++编写一个通常的Windows窗口,上面写着 "Hello Word!"的文字。- 网上有一些例子,写下你的第一个 "Hello Word!- 很多东西都会自己清楚起来的;)
标准是指标准的Windows dlls,标准并不意味着它们是静态的.lib。
伊戈尔,你走错路了......
"Hello Word!"与dll的初始化有什么关系,并在你的线程中调用它的函数 !
比如说。
有一个WinAPI函数MessageBoxW()。
它必须在自己的线程中调用。
为此,你需要初始化dll本身和导出的函数,你能举例说明如何正确操作吗?
然后在初始化之后,用CreateThread()调用MessageBoxW(); 。
函数执行完毕后,释放资源并关闭线程。
给我一个例子,如何在mql中正确操作?
标准是指标准的Windows dll,标准并不意味着它们是静态的.lib。
伊戈尔,你走错方向了......
"Hello Word!"与dll的初始化有什么关系,并在你的线程中调用它的函数 !
比如说。
有一个WinAPI函数MessageBoxW()。
它必须在自己的线程中调用。
为此,你需要初始化dll本身和导出的函数,你能举例说明如何正确操作吗?
然后在初始化之后,用CreateThread()调用MessageBoxW(); 。
执行完函数后,释放资源并关闭线程。
给我一个例子,如何在mql中正确操作?
你走错了路,有人告诉你--写一个dll(其中你必须分配内存并注册一个新线程!)。- 然后在退出时小心翼翼地销毁一切!)并从MQL中调用它。
在你的例子中,内存分配和进程注册在哪里? MessageBox的调用--这意味着MQL程序已经分配了它的资源,但还没有创建一个独立的线程。 我甚至不想检查它,但当MessageBox被调用时,终端应该冻结。
你走错了路,我告诉过你--写一个dll并从MQL中调用它。
你调用MessageBox的事实--这只意味着MQL程序已经提供了它的资源,但没有创建一个独立的线程。 我甚至不想检查它,但当你调用MessageBox时,你的终端应该冻结。
Igor,我引用了初始化dll函数作为例子来理解我所说的。 但我不知道如何在mql中正确地做,纯C++会让人误解。
mql本身的特殊性可能会引起混淆。这就是为什么我在论坛上寻求帮助,而不是向谷歌求助。
为什么我需要写一个dll,因为WinAPI是建立在dll上的,可调用的函数已经在user32.dll 中了,例如
?我创建这个主题是为了理解这个问题,如何在mql中正确地做,你告诉我内存分配 和进程注册在哪里))。
给我看一个适当的例子,如何在mql中做到这一点?
或者指导我去找一个好的指南。
Igor,我给出了dll的初始化函数作为例子来理解我的意思,但我不知道如何在mql中正确操作,纯C++可能会有误导。
mql本身的特殊性可能会引起混淆。这就是为什么我在论坛上寻求帮助,而不是向谷歌求助。
为什么我需要写一个dll,因为WinAPI是建立在dll上的,可调用的函数已经在user32.dll 中了,例如
?我创建这个主题是为了了解在mql中如何正确地做这个问题,你告诉我内存分配 和进程注册在哪里))。
给我看一个适当的例子,如何在mql中做到这一点?
或者指导我去找一个好的指南。
你不能从mql程序中创建一个线程,即使使用WinAPI也不行。
Igor,我举了一个dll初始化函数的例子来理解我的意思,但如何在mql中正确地进行初始化,我不知道,纯C++可能会有误导。
mql本身的特殊性可能会引起混淆。这就是为什么我在论坛上寻求帮助,而不是向谷歌求助。
为什么我需要写一个dll,因为WinAPI是建立在dll上的,可调用的函数已经在user32.dll 中了,例如
?我创建这个主题是为了理解这个问题,如何在mql中正确地做,你告诉我内存分配 和进程注册在哪里))。
给我看一个适当的例子,如何在mql中做到这一点?
或者指导我去找一个好的指南。
再一次,这不是通过MQL来完成的,你要从另一个方面解决问题--从尾部,而不是从头部!"。
你写一个dll - 从MQL中调用它,并将数据传给dll,如果你需要继续MQL程序(复杂的计算),你在dll中创建一个新的线程,并在这个线程中处理数据。
你可以阅读如何编写dll - 在论坛上搜索 "dll",你会发现大约20篇文章
没有教程,但你要用的资源是写一个dll,所以要寻找如何创建线程等方面的解决方案。
你不能从一个mql程序中创建一个流程,即使使用WinAPI也不行。
关于交易、自动交易系统和策略测试的论坛
MQL中的异步和多线程编程
MetaQuotes软件公司。, 2019.07.24 16:31
你 不能从DLL中调用MQL函数。
但是可以通过DLL调用来运行多个线程,使它们在其环境中独立于MQL5工作。
例如,你从MQL中准备数据,将其放置在某处或传递给DLL,而DLL将在多个线程中执行任务,并通过附加函数返回结果。
调用Windows API函数是来自dll的调用,这意味着可以使用CreateThread();
,为Windows API函数创建线程,CreateThread();被移植到标准mql库不是没有原因 的。
对Windows API函数的调用是来自dll的调用,所以对于Windows API函数,可以使用CreateThread() 来创建线程;
CreateThread();被移植到标准mql库是有原因的。
没有人移植任何东西,你在包里看到的只是函数签名。
要创建一个流程,你需要一个函数体--这就是将在流程中运行的函数体。
要在Windows中注册一个线程,你需要填入结构。
见lpStartAddress - 这是函数的入口点地址,将在线程中运行,不用担心内存分配 问题
要解决这个问题,你需要找到一个机会来获得MyFunc()的地址--在内存中,而它是不存在的--好吧,根本就不存在......没有!
我不知道该如何解释这个问题......。这并不存在 ))))