小编Saf*_*afa的帖子

关于多线程下载的缺点

我有一个关于多线程下载的问题,因为你知道使用多个线程下载可以提高应用程序的性能,但是有一些措施要尊重:比如线程数,可用带宽等等,但我真的不明白,为什么例如,使用多个线程可能会降低应用程序的性能,或者服务器的带宽,质量如何影响多线程应用程序的性能?,monothread下载比多线程更快的情况是什么?
谢谢你的回复.

multithreading download

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

我的表单永远不会收到已发布的自定义消息

我正在使用PostMessage从其他单元发送消息到主表单,如下所示:

procedure notify(var Message: TMessage); message 1;
Run Code Online (Sandbox Code Playgroud)

在程序中,信息显示如下WParam:

procedure TForm1.notify(var Message: TMessage);
begin
  Case (Message.WParam) of
    1: memo1.Lines.Add('task started');
    2: memo1.Lines.Add('in progress');
  end;
end;
Run Code Online (Sandbox Code Playgroud)

在另一个单元中,我发送这样的消息:

PostMessage(Handle, 1, 2, variable_info);
Run Code Online (Sandbox Code Playgroud)

首先,什么是消息ID?我将它替换为1,因为它的类型是基数,我应该使用什么呢?我的消息永远不会收到,因为Message.WParam它永远不会等于1或2.我的代码有什么问题?


我编辑了这样的代码:unit1

 const
 WM_MY_MESSAGE = WM_USER + 0;
Run Code Online (Sandbox Code Playgroud)

在代码中我添加了这样的东西:

 PostMessage(Handle,WM_MY_MESSAGE, 1,value_sent);
Run Code Online (Sandbox Code Playgroud)

TFormUnit:

  private
  procedure notify(var Message :TMessage); message WM_MY_MESSAGE;

  procedure TFormMain.notify(var Message: TMessage);
  begin
  Case (Message.WParam)of // which is 1
   1:
  //------------------------------------------
  begin
   memo1.Lines.Add('task started');
Run Code Online (Sandbox Code Playgroud)

通常在PostMessage(Handle,WM_MY_MESSAGE,1,value_sent)时; 执行我应该启动消息任务,但它是相同的错误,没有任何反应!

delphi postmessage

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

如何在辅助线程中使用IdHTTPWork通过汇总下载数据来更新进度条

我正在开发一个多线程的下载应用程序.我有一个线程创建了许多线程,可以下载数据.在下载时我需要查看进度条的进度,所以我将最大值设置为文件的大小,并使用IdHTTPWork计算当前下载的数据,我将其添加为线程(辅助线程)的过程.当我的应用程序启动时,主线程创建其他线程下载(在循环中)并设置开始和结束的位置(idhttp.request.range),然后每个线程开始下载,如下所示:

 HTTP.Request.Range := Format('%d-%d',[begin ,end]);
 HTTP.Get(url,fs);
Run Code Online (Sandbox Code Playgroud)

这是secondarythread.work的过程:

 procedure TSecondaryThread.IdHTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount:      Int64);
 begin

  if AWorkMode = wmRead then
    position:= AWorkCount;// position is a global variable
    SendMessage(HWND_BROADCAST,MyMessage, 2,position);
 end;
Run Code Online (Sandbox Code Playgroud)

我不知道这是不是正确的代码,但我找不到另一种解决方案.每个线程都可以使用下载数据的值来增加位置,因此位置将包含瞬时S中的全局下载,我不知道这是否属实.现在我的问题:1-进度与当前下载的数据量不对应; 相反,它增量非常缓慢.2 - 当我添加-ju​​st当我在此过程中添加-Asend消息时,它永远不会停止工作!那么问题是什么?谢谢

delphi multithreading http download progress-bar

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

如何改变progressBar的起始位置

如何通过将progressBar的一部分设置为空(例如0 - > 50)来更改progressBar的起始位置,并从50.开始进度(绿色),那么有没有具体方法可以做到这一点?

delphi winapi

-1
推荐指数
1
解决办法
813
查看次数