AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[multithreading](coding)

Martin Hope
hmtl
Asked: 2025-04-10 23:29:51 +0800 CST

使用并行处理时 Powershell 脚本出现错误

  • 7

我正在使用 PowerShell 和 -Parallel 选项来加速一个使用 ImageMagick 检查文件格式的脚本。该脚本无需并行处理也能运行,但处理大量文件时速度太慢。当我添加 -Parallel 选项时,总是出现错误。代码如下——有人能帮我找出问题所在吗?

错误:

无法使用指定的命名参数解析参数集。缺少一个或多个参数、不允许同时使用参数,或者为所选参数集提供的参数数量不足。

代码:

$files | ForEach-Object -Parallel {
    param ($file, $magickPath, $errorLogFile)

    try {
        # Run ImageMagick to identify the format
        $output = & $magickPath identify -ping -quiet -format "%m" $file.FullName

        # Check if the image is NOT JPEG or PNG
        if ($output -ne "JPEG" -and $output -ne "PNG") {
            $fileName = $file.Name
            "$fileName - $output"
        }
    }
    catch {
        # Log errors
        $errorMsg = "Error processing file: $($file.FullName). Error: $($_.Exception.Message)"
        $errorMsg | Out-File -FilePath $errorLogFile -Append
    }
} -ThrottleLimit 8 -ArgumentList $magickPath, $errorLogFile | ForEach-Object {
    if ($_ -ne $null) {
        $nonJpegPngFiles += $_
    }
}

更新:

# Folder where the images are located
$folderPath = "C:\Users\johndoe\Documents\saved images"

# File where unsupported image names will be saved
$outputFile = "C:\Users\johndoe\Documents\Unsupported list\unsupported_images_list.txt"

# Path to ImageMagick executable
$magickPath = "C:\Program Files\ImageMagick-7.1.1-016\magick.exe"

# Get all files in the folder
$files = Get-ChildItem -Path $folderPath -File

# Process files in parallel
$result = $files | ForEach-Object -Parallel {
    # Run ImageMagick to identify the format, redirecting stderr to stdout
    $output = & $using:magickPath identify -ping -quiet -format '%m' $_.FullName 2>&1

    # Return the file path and output for filtering later
    [pscustomobject]@{
        Path   = $_.FullName
        Output = $output
    }
} -ThrottleLimit 8

# Filter files that are not JPEG or PNG
$unsupportedFiles = $result | Where-Object { $_.Output -notin 'JPEG', 'PNG' }

# If unsupported files exist, write them to the output file
if ($unsupportedFiles.Count -gt 0) {
    $unsupportedFiles | Select-Object -ExpandProperty Path | Out-File -FilePath $outputFile
    Write-Host "List of unsupported files has been saved to $outputFile."
} else {
    Write-Host "No unsupported files found."
}
multithreading
  • 1 个回答
  • 72 Views
Martin Hope
Zebrafish
Asked: 2025-03-31 02:38:38 +0800 CST

进行多线程编程时的 P 和 E 核心

  • 5

当您将算法/函数/其他内容拆分为单独的线程运行时,假设我启动了 8 个线程,您不知道每个线程将在我的 8 个内核中的一个内核上运行,因为调度程序的工作是决定将哪些线程分配给哪些内核。不过,如果我有 8 个内核,并且我确实将作业拆分为 8 个线程,我几乎可以预料到会发生这种情况,我的 8 个内核中的每一个(大约)将承担八分之一的工作负载。对于具有 P 内核和 E 内核(性能和效率内核)的英特尔处理器,P 内核的时钟频率可能为 5.4Ghz,而 E 内核的时钟频率可能为 4.2Ghz。这种具有两种不同类型处理器的处理器是否会使多线程编程更加不可预测或更不受欢迎?两层系统在其他设备(如智能手机和 Apple CPU)中很常见,同样的问题也适用。作为一名程序员,你该如何解释这样一个事实:当你在不同的线程上运行某些东西时,比如你生成一个新线程,或者另一个线程在线程池中等待作业,它可能运行在性能核心或效率核心上?你有选择吗?

multithreading
  • 1 个回答
  • 45 Views
Martin Hope
Not A Name
Asked: 2025-03-24 01:23:18 +0800 CST

C++11 与传统 GCC 内置函数(如 `__sync_synchronize`)的顺序一致

  • 8

因此,我偶然发现了 Jeff Preshing 的精彩博客文章,其中介绍了什么是AcquireCPU障碍Release以及如何通过一些 CPU障碍实现这些障碍。

我还读过关于某种总顺序的文章,它保证与非一致性后关系SeqCst一致- 尽管有时由于历史原因它可能与由简单/操作建立的前发生关系相矛盾。AcquireRelease

我的问题是,旧的 GCC 内置函数如何映射到 C++11 (及更高版本) 提出的内存模型?具体来说,如何映射__sync_synchronize()到 C++11 或更高版本的现代 C/C++?

在 GCC手册中,此调用被简单地描述为完整内存屏障,我认为这是所有四种主要屏障(即LoadLoad/ LoadStore/ StoreLoad/StoreStore 屏障)的组合。但sync_synchronize 相当于std::atomic_thread_fence(memory_order_seq_cst)?或者,从形式上讲,其中一个比另一个更强(我想这里就是这种情况:通常,SeqCst隔离应该更强,因为它需要工具链/平台以某种方式即兴执行全局排序,不是吗?),而碰巧大多数 CPU只提供同时满足两者(完整内存屏障__sync_synchronize,完全顺序排序std::atomic_thread_fence(memory_order_seq_cst))的指令,例如 x86和 PowerPC ?mfencehwsync

__sync_synchronize和要么std::atomic_thread_fence(memory_order_seq_cst)在形式上相等,要么在实际上相等(即,从形式上讲它们是不同的,但没有商业化的 CPU 会费心区分两者),从技术上讲,memory_order_relaxed对同一原子的负载仍然不能依赖于与它同步/创建先发生关系,不是吗?

也就是说,从技术上讲,所有这些断言都可以失败,对吗?

// Experiment 1, using C11 `atomic_thread_fence`: assertion is allowed to fail, right?

// global
static atomic_bool lock = false;
static atomic_bool critical_section = false;

// thread 1
atomic_store_explicit(&critical_section, true, memory_order_relaxed);
atomic_thread_fence(memory_order_seq_cst);
atomic_store_explicit(&lock, true, memory_order_relaxed);

// thread 2
if (atomic_load_explicit(&lock, memory_order_relaxed)) {
    // We should really `memory_order_acquire` the `lock`
    // or `atomic_thread_fence(memory_order_acquire)` here,
    // or this assertion may fail, no?
    assert(atomic_load_explicit(&critical_section, memory_order_relaxed));
}
// Experiment 2, using `SeqCst` directly on the atomic store

// global
static atomic_bool lock = false;
static atomic_bool critical_section = false;

// thread 1
atomic_store_explicit(&critical_section, true, memory_order_relaxed);
atomic_store_explicit(&lock, true, memory_order_seq_cst);

// thread 2
if (atomic_load_explicit(&lock, memory_order_relaxed)) {
    // Again we should really `memory_order_acquire` the `lock`
    // or `atomic_thread_fence(memory_order_acquire)` here,
    // or this assertion may fail, no?
    assert(atomic_load_explicit(&critical_section, memory_order_relaxed));
}
// Experiment 3, using GCC built-in: assertion is allowed to fail, right?

// global
static atomic_bool lock = false;
static atomic_bool critical_section = false;

// thread 1
atomic_store_explicit(&critical_section, true, memory_order_relaxed);
__sync_synchronize();
atomic_store_explicit(&lock, true, memory_order_relaxed);

// thread 2
if (atomic_load_explicit(&lock, memory_order_relaxed)) {
    // we should somehow put a `LoadLoad` memory barrier here,
    // or the assert might fail, no?
    assert(atomic_load_explicit(&critical_section, memory_order_relaxed));
}

我已经在 RPi 5 上尝试了这些代码片段,但我没有看到断言失败。是的,这并没有正式证明任何事情,但它也没有阐明__sync_synchronize和之间的区别std::atomic_thread_fence(memory_order_seq_cst)。

multithreading
  • 1 个回答
  • 47 Views
Martin Hope
Rishi
Asked: 2025-03-23 12:47:46 +0800 CST

硬件线程中的上下文切换

  • 7

在超线程(或 SMT)中,当 CPU 核心的两个线程被换入和换出时,是否会发生上下文切换。

这会被称为上下文切换吗?如果不是,那么它的术语是什么。

multithreading
  • 1 个回答
  • 43 Views
Martin Hope
Bass
Asked: 2025-02-08 01:40:45 +0800 CST

在 Kotlin 中可以使用 DCL 模式原子地初始化 @Volatile lateinit var 吗?

  • 7

请考虑以下用 Kotlin 编写的 DCL 示例:

@Volatile
private var property: String? = null

private val lock = ReentrantLock()

fun singletonValue(): String {
    if (property == null) {
        lock.withLock {
            if (property == null) {
                property = "Hello World"
            }
        }
    }
    return property!!
}

它与二十年前讨论的 Java 对应部分非常相似,当时 Java 内存模型随着从 Java 1.4 到 Java 5 的过渡而得到修正。话虽如此,我完全确信上述代码片段在 JVM 上运行时会正常运行。

现在,让我们用lateinit var:

@Volatile
private lateinit var property: String

private val lock = ReentrantLock()

fun singletonValue(): String {
    if (!::property.isInitialized) {
        lock.withLock {
            if (!::property.isInitialized) {
                property = "Hello World"
            }
        }
    }
    return property
}

它在语义上与原始示例等同吗?它是否保持相同的原子性和可见性保证?

multithreading
  • 1 个回答
  • 29 Views
Martin Hope
Kris Rice
Asked: 2025-02-03 20:04:31 +0800 CST

如何正确(且安全地)管理 akka actor 中的对象序列?

  • 7

背景

我有一个Actor名为akka 的程序Client,它管理http与https服务器的连接。客户端有许多功能,包括ping服务和tokenFetcher服务。

代表client一个服务器与另一个服务器之间的“连接”。其设计目的是允许一个服务器server与另一个服务器聊天。

其过程client如下:

  1. 定期检查ping对方server是否在线
  2. 如果对方server在线,则执行auth并获取令牌
  3. 如果令牌有效,则清除向我们请求的所有呼叫

我正在努力解决的是第 3 步。我想知道如何在线程 (actor) 之间安全地实现这一点。

我尝试过的:

我正在使用Seq客户端存储的消息,如下所示:


case class SendApiCall(apiCall: ApiCall, route: String, var sent: Boolean = false)

class Client(server: Server) extends Actor {
    private var apiCalls: Seq[SendApiCall] = Seq.empty[SendApiCall]

    ...

    override def receive: Receive = {
        case sendApiCall@SendApiCall(_, _, _) =>
            if (server.onlineStatus == OFFLINE) {
                apiCalls = apiCalls.appended(sendApiCall)
            }
            else {
                sendApiCall(sendApiCall)
            }
        
        case ServerOnline() => // <- this is send to us from the ping service when it first detects the server is online
            
            apiCalls.iterator.foreach( apiCallRequest =>
                if (!apiCallRequest.sent) {
                    sendApiCall(apiCallRequest)
                    apiCallRequest.sent = true
                }
                apiCallRequest
            )

            apiCalls = apiCalls.filterNot(apiCallRequest => apiCallRequest.sent)
    }
}

但是,我相信apiCalls这是mutable这种情况的状态吗?我想知道:

  1. 这个线程安全吗?
  2. 如果不是线程安全的,我该如何让它变得安全?
multithreading
  • 2 个回答
  • 40 Views
Martin Hope
mahkitah
Asked: 2025-01-12 23:18:14 +0800 CST

迭代器+多线程在 for 循环中失败

  • 6

我有一个自制的迭代器,我想循环它,在线程池中执行一些昂贵的处理,并按输入顺序收集结果。

我使用这个链:
Iterator > enumerate() > rayon par_bridge() > map()

当我使用此链并将collect()其放入向量中时,没有任何问题,但当我使用 for 循环时,我收到错误,提示某些内容不是迭代器。
我不明白其中的区别。

这是 MRE:

use std::vec::IntoIter;
use rayon::prelude::*;

fn main() {
    // collecting();
    for_loop();
}

fn collecting() {
    let some_vec = (1..100).collect::<Vec<u8>>();
    let x_iter = AA {y: some_vec.into_iter()};
    
    let with_index: Vec<(usize, u8)> = x_iter
        .enumerate()
        .par_bridge()
        .map(|(i, x)| {(i, x - 1)})
        .collect();

    println!("{:?}", with_index);
}

fn for_loop() {
    let some_vec = (1..100).collect::<Vec<u8>>();
    let x_iter = AA {y: some_vec.into_iter()};

    let mut with_index: Vec<(usize, u8)> = Vec::with_capacity(99);
    for x in x_iter
        .enumerate()
        .par_bridge() // with this line commented out it works fine
        .map(|(i, x)| {(i, x - 1)})
    {
        with_index.push(x);
    }
    println!("{:?}", with_index);
}


struct AA {
    y: IntoIter<u8>
}

impl Iterator for AA {
    type Item = u8;

    fn next(&mut self) -> Option<u8> {
        self.y.next()
    }
}

该collecting函数运行正常。
该for_loop函数给出以下错误:

rayon::iter::Map<IterBridgestd::iter::Enumerate<AA>, {closure@src/main.rs:30:14: 30:22}> 不是迭代器

请解释我为什么会收到这个错误。

multithreading
  • 2 个回答
  • 74 Views
Martin Hope
Shweta Softwares
Asked: 2025-01-02 00:16:44 +0800 CST

如何在 Delphi 中使用 TTask 和 TThreadPool 运行多个任务并确保准确报告其启动和完成情况?

  • 6

我正在尝试在 Delphi 10.4 (Sydney) 中实现多线程。我使用 TTask 并发运行任务,使用 TThreadPool 限制同时运行的线程。

这是我的代码:

var
  MyThreadPool: TThreadPool;
  I: Integer;
  Tasks: TArray<ITask>;

function ProcessTask(const TaskId: Integer): TProc;
begin
  Result := procedure
  Begin
    WriteLn(Format('Started TaskId: %d ThreadId: %d',[TaskId,TThread.Current.ThreadID]));
    Sleep(2000); // Simulate work
    WriteLn(format('TaskId %d completed. ThreadId: %d',[TaskId, TThread.Current.ThreadID]));
  End;
end;

begin
  try

    Writeln('Creating TThreadPool');
    MyThreadPool := TThreadPool.Create;

    try
      MyThreadPool.SetMinWorkerThreads(1);
      MyThreadPool.SetMaxWorkerThreads(4);

      // Hold 10 tasks
      SetLength(Tasks,10);

      for I := 0 to High(Tasks) do
      Begin
        Tasks[I] := TTask.Create(
          ProcessTask(I+1),
          MyThreadPool
        );

        // Start the task
        Tasks[I].Start;
      End;

      // Wait for all tasks to complete
      for I := 0 to High(Tasks) do
        Tasks[I].Wait;

      WriteLn('All tasks completed.');
      ReadLn;

    finally
      MyThreadPool.Free;
    end;

  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.

上述代码的输出是:

Creating TThreadPool
Started TaskId: 1 ThreadId: 17292
Started TaskId: 1 ThreadId: 17292
Started TaskId: 2 ThreadId: 19256
Started TaskId: 3 ThreadId: 25268
Started TaskId: 3 ThreadId: 25268
Started TaskId: 4 ThreadId: 21112
TaskId 1 completed. ThreadId: 17292
Started TaskId: 5 ThreadId: 17292
TaskId 2 completed. ThreadId: 19256
Started TaskId: 6 ThreadId: 19256
TaskId 3 completed. ThreadId: 25268
TaskId 3 completed. ThreadId: 25268
TaskId 4 completed. ThreadId: 21112
Started TaskId: 7 ThreadId: 21112Started TaskId: 8 ThreadId: 25268Started TaskId: 7 ThreadId: 21112Started TaskId: 8 ThreadId: 25268
TaskId 5 completed. ThreadId: 17292
Started TaskId: 9 ThreadId: 17292
TaskId 6 completed. ThreadId: 19256
Started TaskId: 10 ThreadId: 19256
TaskId 8 completed. ThreadId: 25268
TaskId 8 completed. ThreadId: 25268
TaskId 7 completed. ThreadId: 21112
TaskId 9 completed. ThreadId: 17292
TaskId 10 completed. ThreadId: 19256
All tasks completed.

代码的问题在于在某些情况下开始和完成报告会重复:

  1. Started TaskId出现了两次,分别为 TaskId 1,3,7,8。
  2. TaskId完成出现了两次,分别是 TaskId 3,8。
multithreading
  • 1 个回答
  • 77 Views
Martin Hope
I'mSRJ
Asked: 2024-12-31 02:10:21 +0800 CST

在 Delphi 中使用队列实现多线程以限制同时运行的 n 个线程?

  • 6

我已经使用 Delphi 有一段时间了,现在正尝试在我的代码中实现多线程,要求如下:

  1. 每次只能运行 2 个线程。

  2. 其他任务应在队列中等待,并在线程可用时执行。

我尝试使用TParallel.For来实现这一点,但无法实现所需的行为。这是我的示例代码:

    type
       TMyRecord = record
         msg: String;
         sleep: Integer;
          end;

    var
      Form2: TForm2;

    implementation

    {$R *.dfm}

    procedure TForm2.Button1Click(Sender: TObject);
    var
      record1, record2, record3, record4, record5: TMyRecord;
      MyList: TList<TMyRecord>;
    begin
      // Initialize records
      record1.msg := 'Item1';
      record1.sleep := 10;

      record2.msg := 'Item2';
      record2.sleep := 10;

      record3.msg := 'Item3';
      record3.sleep := 3000;

      record4.msg := 'Item4';
      record4.sleep := 3000;

      record5.msg := 'Item5';
      record5.sleep := 100;

     MyList := TList<TMyRecord>.Create;
      try
        // Add records to the list
        MyList.Add(record1);
        MyList.Add(record2);
        MyList.Add(record3);
        MyList.Add(record4);
        MyList.Add(record5);

    // Use TParallel.For
    TParallel.For(0, MyList.Count - 1,
      procedure (i: Integer)
      var
        ListItem: TMyRecord;
      begin
        ListItem := MyList[i];

        TThread.Synchronize(nil,
          procedure
          begin
            Memo1.Lines.Add(ListItem.msg);
          end);

        Sleep(ListItem.sleep);
      end);

      finally
    MyList.Free;
  end;
end;

我也尝试使用TTask.Run和ThreadPool,但无法实现所需的行为。更新 - 这是我尝试使用 Threadpool 执行的操作

procedure TForm2.Button1Click(Sender: TObject);
var
  record1, record2, record3, record4, record5: TMyRecord;
  MyList: TList<TMyRecord>;
  ThreadPool: TThreadPool;
begin
  // Initialize records
  record1.msg := 'Item1';
  record1.sleep := 10;

  record2.msg := 'Item2';
  record2.sleep := 10;

  record3.msg := 'Item3';
  record3.sleep := 3000;

  record4.msg := 'Item4';
  record4.sleep := 3000;

  record5.msg := 'Item5';
  record5.sleep := 100;

  MyList := TList<TMyRecord>.Create;
  try
    // Add records to the list
    MyList.Add(record1);
    MyList.Add(record2);
    MyList.Add(record3);
    MyList.Add(record4);
    MyList.Add(record5);

    ThreadPool := TThreadPool.Create;
    ThreadPool.SetMaxWorkerThreads(2);

    // Iterate through the list and queue each work item with a copy of the record
    for var i := 0 to MyList.Count - 1 do
    begin
      var ListItem := MyList[i];

      ThreadPool.QueueWorkItem(
        procedure
        var
          LocalItem: TMyRecord;
        begin
          LocalItem := ListItem;

          TThread.Queue(nil,
            procedure
            begin
              Memo1.Lines.Add(LocalItem.msg);
              Sleep(LocalItem.sleep);  // Simulate the delay
            end);
        end);
    end;
  finally
    MyList.Free;
  end;
end;

此代码有问题-

  1. 它仅打印“item5”5次。
  2. 等待时间(睡眠)不起作用。

我该如何修改此代码以将同时运行的线程数限制为 2?并在线程可用时将其他任务排队执行?

multithreading
  • 2 个回答
  • 76 Views
Martin Hope
user2138149
Asked: 2024-12-28 22:36:53 +0800 CST

如何在 Rust 中与作用域线程共享布尔标志?

  • 7

我正在尝试使用布尔标志来表示线程应该退出。但是,目前我的代码违反了借用检查器规则。我理解它为什么违反这些规则,但我不知道最合适的设计是什么以及如何解决问题。

fn long_running(exit_flag: &bool) {

    loop {
        std::thread::sleep(std::time::Duration::from_secs(10));

        if *exit_flag {
            break;
        }
    }
}

fn main() {

    let mut exit_flag = false;
    std::thread::scope(
        |scope| {
            let handle = scope.spawn(
                || {
                    long_running(&exit_flag); # (1)
                }
            );

            exit_flag = true; # (2)

            // terminate the consumer poll loop
            handle.join().expect("failed to join thread");
        }
    );
}

问题涉及标有# (1)和 的行# (2)。

  • # (1):引用exit_flag自
  • # (2):在引用仍被借用时尝试改变底层变量

由于借用检查规则,这是不允许的。

  • 解决该问题的一个方法可能是堆分配标志,并使用它在两个线程之间共享数据。
  • 但是,使用的目的std::thread::scope是允许启动一个可以从父(主)线程的堆栈访问局部变量的线程。

顺便说一下,这个想法是从这个帖子里得到的

  • 如何将堆栈变量的引用传递给线程?
multithreading
  • 1 个回答
  • 58 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve