小编Eri*_*tný的帖子

C#Mysql - 在async await服务器上使用数据库查询锁

TcpListener上课,我正在async/await阅读和写作.

对于这个服务器,我创建了单个数据库实例,我准备了所有数据库查询.

但是对于一个以上,TcpClient我一直在例外:

MySql.Data.MySqlClient.MySqlException发生了类型的异常,MySql.Data.dll但未在用户代码中处理

附加信息:已经有一个DataReader与此相关的开放Connection,必须先关闭.

如果我理解正确的话,那么一次数据库查询就不会超过一个async客户端.

所以我只是在我的查询中添加了锁,这样一切似乎都很好.

   // One MySqlConnection instance for whole program.

   lock (thisLock)
   {
    var cmd = connection.CreateCommand();

    cmd.CommandText = "SELECT Count(*) FROM logins WHERE username = @user AND password = @pass";
    cmd.Parameters.AddWithValue("@user", username);
    cmd.Parameters.AddWithValue("@pass", password);

    var count = int.Parse(cmd.ExecuteScalar().ToString());
    return count > 0;
}
Run Code Online (Sandbox Code Playgroud)

我也尝试使用这个方法为每个查询创建新连接,如SO社区的某个人所提到的,但这个方法比锁慢得多:

    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();   // This takes +- 35ms and makes worse …
Run Code Online (Sandbox Code Playgroud)

c# mysql connection ado.net async-await

10
推荐指数
1
解决办法
606
查看次数

extern"C"默认参数是否有效?

这里看来,C不支持默认参数.

我在导出的库中有以下方法:

extern "C" 
{
    __declspec (dllexport) uintptr_t Method(int freq, int *pRetval, bool *support2MHz);
}
Run Code Online (Sandbox Code Playgroud)

如果我使最后一个参数可选像这样:

extern "C" 
{
    __declspec (dllexport) uintptr_t Method(int freq, int *pRetval, bool *support2MHz = NULL);
}
Run Code Online (Sandbox Code Playgroud)

我的dll仍在编译中.我的问题是为什么?每个人都说C代码不支持默认参数.

我使用C++ for MS 2015.

c c++ arguments extern

8
推荐指数
1
解决办法
719
查看次数

在静默安装 Python 时添加到 Path var - 可能的错误?

我需要在我的应用程序包安装中被动安装 Python,所以我使用以下内容:

python-3.5.4-amd64.exe /passive PrependPath=1
Run Code Online (Sandbox Code Playgroud)

根据这个:3.1.4。在没有 UI 的情况下安装我使用 PrependPath 参数,该参数应该将路径添加到 Windows 环境变量中的 Path 中。

但它似乎不起作用。变量不会发生任何变化。

如果我手动开始安装并选择或取消选择添加到路径的复选框,那么一切正常。

在修改当前安装时也与清除安装相同。不幸的是,我没有其他装有 Win 10 Pro 的 PC 来测试它。

我也用 Python 3.6.3 尝试过,结果相同。

编辑:

还尝试使用 PowerShellStart-Process python-3.5.4-amd64.exe -ArgumentList /passive , PretendPath=1获得相同的结果。

也在多台装有 Windows 10 的 PC 上进行了测试,结果相同,所以问题不仅仅出现在单台 PC 上

编辑: 当然,所有尝试都以管理员身份运行。

python windows installation python-install windows-10

6
推荐指数
1
解决办法
2156
查看次数

PyQt5-如何通过GUI线程从工作区发出信号以调用事件

正如我在标题中提到的。我该怎么做?

class Main(QWidget):

        def __init__(self):

                super().__init__()

        def StartButtonEvent(self):

                self.test = ExecuteThread()
                self.test.start()

        def MyEvent(self):

                #MainThreadGUI

class ExecuteThread(QThread):

        def run(self):

                # A lot of work

                # Signal to main thread about finishing of job = mainthread will perform MyEvent
Run Code Online (Sandbox Code Playgroud)

我在这里找到了一些教程pyqt4在线程中向主线程的插槽中发射信号

这里从pyQt Qthread发出信号

但是似乎在PyQt5中不起作用:/

python pyqt5

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

多处理时在哪里调用join()

在Python中使用多处理时,我通常会看到一些示例,其中join()函数在一个单独的循环中调用,以实际创建每个进程.

例如,这个:

processes = []

for i in range(10):
    p = Process(target=my_func)
    processes.append(p)
    p.start()

for p in processes:
    p.join()
Run Code Online (Sandbox Code Playgroud)

比这更常见:

processes = []

for i in range(10):
    p = Process(target=my_func)
    processes.append(p)
    p.start()
    p.join()
Run Code Online (Sandbox Code Playgroud)

但是根据我的理解join(),它只是告诉脚本在该过程完成之前不要退出.因此,join()调用何时无关紧要.那么为什么通常在一个单独的循环中调用呢?

python python-multiprocessing

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

C# - 新线程无法启动

我想问你为什么我的方法StartReading没有被触发?我期待在控制台中"测试"文本,但没有出现.

public class Connection
{
    public List<byte[]> ReadBuffer = new List<byte[]>();

    TcpClient ClientLogin;
    NetworkStream StreamLogin;
    DataEncoder NetworkBufferLogin;

    Thread ReadingThread;

    public Connection()
    {
        ClientLogin = new TcpClient("127.0.0.1", 13000);
        StreamLogin = ClientLogin.GetStream();
        NetworkBufferLogin = new DataEncoder(StreamLogin);
        ReadingThread = new Thread(StartReading);
    }

    private void StartReading()
    {
        while (true)
        {
            Console.WriteLine("test");
            byte[] a = NetworkBufferLogin.ReceiveData();
            ReadBuffer.Add(a);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和简单的呼唤

  class Program
{
    static void Main(string[] args)
    {
        Connection test = new Connection();
        Console.ReadKey();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading

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