我正在尝试修复 C# 异步代码,启动在非托管 C++ 例程编写的外部 dll 中执行的可取消操作。
如果用户委托调用外部非托管 C++ 例程,是否有办法使用在创建时传递给任务的取消令牌来取消任务?
据我所知,任务取消涉及用户委托和请求取消的代码之间的合作。成功的取消涉及请求代码调用 CancellationTokenSource.Cancel 方法,以及用户委托及时终止操作,方法是在注意到已提出取消请求时简单地从委托返回(通过轮询 CancellationToken.IsCancellationRequested)方法)或使用 CancellationToken.ThrowIfCancellationRequested 方法抛出 OperationCanceledException。(参见http://msdn.microsoft.com/en-us/library/dd997396%28v=vs.110%29.aspx)
这两种方式涉及由用户委托执行的非托管 C++ 例程通过接收 CancellationToken 作为参数并定期调用其 IsCancellationRequested 和/或 ThrowIfCancellationRequested 方法来进行协作。
是否可以从非托管外部 C++ 例程执行此操作?
如果不是,当请求代码请求取消时,是否有办法强制终止执行用户委托的任务(执行非托管 C++ 例程)?
以下是我尝试修复的混合 C# / C++Cli / 非托管 C++ 代码的示例(摘录),以便能够取消用户委托在 C++ 非托管代码部分中执行的操作:
FrmDemo.cs:-------------------------------------------------------- ----------------------------
public class FrmDemo : Form
{
private CliClass m_CliObject;
private System.Threading.CancellationTokenSource m_Cts;
private System.Threading.CancellationToken m_Ct;
private void FrmDemo_Load(object sender, EventArgs e)
{
// Creating the external CliObject:
this.m_CliObject = new NSDemo.CliClass();
...
}
// …Run Code Online (Sandbox Code Playgroud) 我对 SSL 和这些加密的东西完全陌生,但我需要使客户端和服务器在移动设备上运行的 Delphi XE6 应用程序进行通信。TCP 通信必须安全加密。
首先,我简单地编写了基于 Delphi/Indy TIdTCPServer/TIdTCPClient 的 Win32 客户端和服务器交换字符串。(从 SourceForge 上找到的 indy10clieservr 演示发布:svn://svn.code.sf.net/p/indy10clieservr/code/1_sample Simple String Exchange)
我尝试修改它们以通过在服务器上添加 TIdServerIOHandlerSSLOpenSSL 组件和在客户端上添加 TIdSSLIOHandlerSocketOpenSSL 组件来加密通信,并将它们分别附加到 TIdTCPServer 和 TIdTCPClient。
我在两侧设置了以下属性: - SSLOptions.Method = sslvSSSv23 - SSLOptions.Mode = sslmServer / sslmClient (分别) - SSLOptions.VerifyDepth = 2
我还添加了一个 OnGetPassword 事件处理程序,将两侧的密码参数设置为“密码”。(这个密码的作用是什么?它对通信隐私至关重要吗?如果通过分析/逆向工程二进制文件找到它怎么办?)
最后,在服务器的 OnConnect 事件处理程序中,我将 TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough 属性设置为 false。
但是 3 个 SSLOptions 证书属性又如何呢?- 证书文件 - 密钥文件 - RootCertFile
如何在我的目标设备上生成和部署它们,以便在客户端和服务器上运行我的 SSL 层?
此外,如果我打算稍后在 IOS 或 Android 移动设备上部署我的服务器和/或客户端,是否需要做或考虑一些特殊的事情。
我知道我对这个 SSL 主题知之甚少。抱歉,如果我问一些微不足道的问题。任何向新手解释所有这些棘手内容的基本文档将不胜感激。
c# ×1
c++-cli ×1
cancellation ×1
delphi ×1
delphi-xe6 ×1
indy ×1
interop ×1
ssl ×1
task ×1
tcp ×1